home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 6 / The Arsenal Files 6 (Arsenal Computer).ISO / prg_gen / inter49b.zip / INTERRUP.H < prev    next >
Text File  |  1996-02-11  |  346KB  |  9,034 lines

  1. Interrupt List, part 8 of 14
  2. Copyright (c) 1989,1990,1991,1992,1993,1994,1995,1996 Ralf Brown
  3. --------D-21F9-------------------------------
  4. INT 21 - DOS v2.11-2.13 - OEM FUNCTION
  5.     AH = F9h
  6. Return: AL = 00h if no OEM function handler installed (see AH=F8h"OEM")
  7. SeeAlso: AH=F8h"OEM",AH=FAh"OEM"
  8. --------T-21F9-------------------------------
  9. INT 21 - DoubleDOS - SET TIMESHARING PRIORITY
  10.     AH = F9h
  11.     AL = priority
  12.         00h visible program gets 70%, invisible gets 30% (default)
  13.         01h visible program gets 50%, invisible gets 50%
  14.         02h visible program gets 30%, invisible gets 70%
  15.         03h Top program gets 70%, bottom program gets 30%
  16.         04h Top program gets 30%, bottom program gets 70%
  17.         05h get current priority
  18.         Return: AL = priority setting
  19. Note:    identical to AH=E9h
  20. SeeAlso: AH=E9h"DoubleDOS",AH=FAh"DoubleDOS",AH=FBh"DoubleDOS"
  21. --------v-21F9-------------------------------
  22. INT 21 - VIRUS - "Satans-Bug" - INSTALLATION CHECK
  23.     AH = F9h
  24. Return: AX = AC0Ah if resident
  25. SeeAlso: AH=F7h"VIRUS",AH=FBh"VIRUS",AX=FEDCh"VIRUS"
  26. --------D-21FA-------------------------------
  27. INT 21 - DOS v2.11-2.13 - OEM FUNCTION
  28.     AH = FAh
  29. Return: AL = 00h if no OEM function handler installed (see AH=F8h"OEM")
  30. SeeAlso: AH=F8h"OEM",AH=F9h"OEM",AH=FBh"OEM"
  31. --------T-21FA-------------------------------
  32. INT 21 - DoubleDOS - TURN OFF TASK SWITCHING
  33.     AH = FAh
  34. Return: task switching turned off
  35. SeeAlso: AH=EAh"DoubleDOS",AH=F9h"DoubleDOS",AH=FBh"DoubleDOS"
  36. SeeAlso: INT FA"DoubleDOS"
  37. --------v-21FA-------------------------------
  38. INT 21 - VIRUS - "Cinderella 2" - INSTALLATION CHECK
  39.     AH = FAh
  40. Return: AH = F9h if resident
  41. SeeAlso: AH=F0h"VIRUS",AX=FBA0h"VIRUS"
  42. --------v-21FA--DX5945-----------------------
  43. INT 21 U - PC Tools v7+ VDEFEND, VSAFE, VWATCH - API
  44.     AH = FAh
  45.     DX = 5945h
  46.     AL = function (00h-02h for VDEFEND, 00h-07h for VSAFE and VWATCH)
  47. Return: varies by function
  48. Note:    this API is identical to the API on INT 13/AH=FAh and INT 16/AH=FAh,
  49.       so it is listed in its entirety only under INT 16/AX=FA00h and
  50.       following
  51. SeeAlso: INT 13/AX=FA00h,INT 16/AX=FA00h
  52. --------D-21FB-------------------------------
  53. INT 21 - DOS v2.11-2.13 - OEM FUNCTION
  54.     AH = FBh
  55. Return: AL = 00h if no OEM function handler installed (see AH=F8h"OEM")
  56. SeeAlso: AH=F8h"OEM",AH=FAh"OEM",AH=FCh"OEM"
  57. --------T-21FB-------------------------------
  58. INT 21 - DoubleDOS - TURN ON TASK SWITCHING
  59.     AH = FBh
  60. Return: task switching turned on
  61. SeeAlso: AH=EBh"DoubleDOS",AH=F9h"DoubleDOS",AH=FAh"DoubleDOS"
  62. SeeAlso: INT FB"DoubleDOS"
  63. --------v-21FB-------------------------------
  64. INT 21 - VIRUS - "Cinderella" - INSTALLATION CHECK
  65.     AH = FBh
  66. Return: AH = 00h if resident
  67. SeeAlso: AH=F9h"VIRUS",AH=FAh"VIRUS",AX=FB0Ah
  68. --------v-21FB0A-----------------------------
  69. INT 21 - VIRUS - "dBASE" - INSTALLATION CHECK
  70.     AX = FB0Ah
  71. Return: AX = 0AFBh if resident
  72. SeeAlso: AH=FBh"VIRUS",AX=FBA0h"VIRUS",AH=FCh"VIRUS"
  73. --------v-21FBA0-----------------------------
  74. INT 21 - VIRUS - "Groove" - INSTALLATION CHECK
  75.     AX = FBA0h
  76. Return: AX = 0ABFh if resident
  77. SeeAlso: AX=FB0Ah"VIRUS",AH=FCh"VIRUS"
  78. --------D-21FC-------------------------------
  79. INT 21 - DOS v2.11-2.13 - OEM FUNCTION
  80.     AH = FCh
  81. Return: AL = 00h if no OEM function handler installed (see AH=F8h"OEM")
  82. SeeAlso: AH=F8h"OEM",AH=FBh"OEM",AH=FDh"OEM"
  83. --------T-21FC-------------------------------
  84. INT 21 - DoubleDOS - GET VIRTUAL SCREEN ADDRESS
  85.     AH = FCh
  86. Return: ES = segment of virtual screen
  87. Desc:    Determine the address of the virtual screen to which the program
  88.       should write instead of the actual video memory, so that the
  89.       multitasked programs do not interfere with each other's output.
  90. Notes:    screen address can change if task-switching is on!
  91.     identical to AH=ECh
  92. SeeAlso: AH=ECh"DoubleDOS",INT FC"DoubleDOS"
  93. --------v-21FC-------------------------------
  94. INT 21 - VIRUS - "Troi" - INSTALLATION CHECK
  95.     AH = FCh
  96. Return: AL = A5h if resident
  97. SeeAlso: AX=FBA0h"VIRUS",AX=FC03h"VIRUS",AH=FDh"VIRUS"
  98. --------v-21FC03-----------------------------
  99. INT 21 - VIRUS - "Invisible" - INSTALLATION CHECK
  100.     AX = FC03h
  101. Return: AX = 03FCh if resident
  102. SeeAlso: AH=FCh"VIRUS",AH=FDh"VIRUS"
  103. --------D-21FD-------------------------------
  104. INT 21 - DOS v2.11-2.13 - OEM FUNCTION
  105.     AH = FDh
  106. Return: AL = 00h if no OEM function handler installed (see AH=F8h"OEM")
  107. SeeAlso: AH=F8h"OEM",AH=FCh"OEM",AH=FEh"OEM"
  108. --------v-21FD-------------------------------
  109. INT 21 - VIRUS - "Border" - INSTALLATION CHECK
  110.     AH = FDh
  111. Return: AH = 13h if resident
  112. SeeAlso: AH=FCh"VIRUS",AX=FDACh"VIRUS",AH=FEh"VIRUS"
  113. --------s-21FD12BX3457-----------------------
  114. INT 21 - Gravis UltraSound - MegaEm/MEGA_EM - INSTALLATION CHECK
  115.     AX = FD12h
  116.     BX = 3457h
  117. Return: AX = 5678h if installed
  118.     BX = 1235h if v1.x or v2.x installed
  119.         CL = interrupt vector used by MegaEm (default 81h)
  120.     BX = 1237h if v3.x installed
  121.         CL = interrupt vector used by MegaEm (default 81h)
  122.         DX = version number
  123. Program: MegaEm is a protected-mode SoundBlaster, SoundCanvas, and MT-32
  124.       emulator for the Gravis UltraSound
  125. SeeAlso: INT 2F/AX=CD00h/BX=464Fh,INT 7E/AX=00FEh"SBOS"
  126. --------v-21FDAC-----------------------------
  127. INT 21 - VIRUS - "Delwin" - INSTALLATION CHECK
  128.     AX = FDACh
  129. Return: AX = 02E3h if resident
  130. SeeAlso: AH=FDh"VIRUS",AH=FEh"VIRUS"
  131. --------D-21FE-------------------------------
  132. INT 21 - DOS v2.11-2.13 - OEM FUNCTION
  133.     AH = FEh
  134. Return: AL = 00h if no OEM function handler installed (see AH=F8h"OEM")
  135. SeeAlso: AH=F8h"OEM",AH=FDh"OEM",AH=FFh"OEM"
  136. --------T-21FE-------------------------------
  137. INT 21 - DoubleDOS - GIVE AWAY TIME TO OTHER TASKS
  138.     AH = FEh
  139.     AL = number of 55ms time slices to give away
  140. Return: returns after giving away time slices
  141. SeeAlso: AH=EEh"DoubleDOS",INT FE"DoubleDOS"
  142. --------v-21FE-------------------------------
  143. INT 21 - VIRUS - "483" - INSTALLATION CHECK
  144.     AH = FEh
  145. Return: AH = 00h if resident
  146. SeeAlso: AX=FDACh"VIRUS",AX=FE01h
  147. --------v-21FE01-----------------------------
  148. INT 21 - VIRUS - "Flip" - INSTALLATION CHECK
  149.     AX = FE01h
  150. Return: AX = 01FEh if resident
  151. SeeAlso: AH=FEh"VIRUS",AX=FE02h
  152. --------v-21FE02-----------------------------
  153. INT 21 - VIRUS - "2468"/"Tequila" - INSTALLATION CHECK
  154.     AX = FE02h
  155. Return: AX = 01FDh if resident
  156. SeeAlso: AX=FE01h,AX=FE03h,AX=FEDCh"VIRUS"
  157. --------v-21FE03-----------------------------
  158. INT 21 - VIRUS - "2468"/"Tequila" - DISPLAY VIRUS MESSAGE
  159.     AX = FE03h
  160. SeeAlso: AX=FE02h,AX=FEADh
  161. --------v-21FEAD------------------------
  162. INT 21 - VIRUS - "Shifting Objective" - INSTALLATION CHECK
  163.     AX = FEADh
  164. Return:    AX = D00Dh if resident
  165. SeeAlso: AX=FE03h,AX=FEDCh"VIRUS"
  166. --------d-21FEDC-----------------------------
  167. INT 21 - PCMag PCMANAGE/DCOMPRES - INSTALLATION CHECK
  168.     AX = FEDCh
  169. Return: AX = CDEFh if installed
  170. Program: the PCMANAGE/DCOMPRES combination from PC Magazine permits
  171.       infrequently-used files to be compressed to save space and
  172.       transparently expanded when accessed
  173. SeeAlso: AH=DCh,INT 2D/AL=10h"dLite"
  174. --------v-21FEDC-----------------------------
  175. INT 21 - VIRUS - "Black Monday" - INSTALLATION CHECK
  176.     AX = FEDCh
  177. Return: AL = DCh if resident
  178. SeeAlso: AX=FE02h,AX=FEFEh
  179. --------v-21FEFE-----------------------------
  180. INT 21 - VIRUS - "CIDER" - INSTALLATION CHECK
  181.     AX = FEFEh
  182. Return: SI = 1994h if resident
  183. SeeAlso: AX=FEDCh"VIRUS",AH=FFh"VIRUS"
  184. --------D-21FF-------------------------------
  185. INT 21 - DOS v2.11-2.13 - OEM FUNCTION
  186.     AH = FFh
  187. Return: AL = 00h if no OEM function handler installed (see AH=F8h"OEM")
  188. SeeAlso: AH=F8h"OEM",AH=FEh"OEM"
  189. --------K-21FF-------------------------------
  190. INT 21 - CED (Command EDitor) - INSTALLABLE COMMANDS
  191.     AH = FFh
  192.     AL = subfunction
  193.         00h add installable command
  194.         BL = mode
  195.             bit 0 = 1 callable from DOS prompt
  196.             bit 1 = 1 callable from application
  197.         DS:SI -> CR-terminated command name
  198.         ES:DI -> FAR routine entry point
  199.         01h remove installable command
  200.         DS:SI -> CR-terminated command name
  201.         02h reserved, may be used to test for CED installation
  202. Return: CF clear if successful
  203.     CF set on error
  204.         AX = error code
  205.         01h invalid function
  206.         02h command not found (subfunction 01h only)
  207.         08h insufficient memory (subfunction 00h only)
  208.         0Eh bad data (subfunction 00h only)
  209.     AH = FFh if CED not installed
  210. Program: CED is a shareware DOS command-line enhancer by Christopher J. Dunford
  211. SeeAlso: AX=0A00h
  212. --------E-21FF-------------------------------
  213. INT 21 - DJ GO32.EXE 80386+ DOS extender - DOS EXTENSIONS
  214.     AH = FFh
  215.     AL = function
  216.         01h create file
  217.         02h open file
  218.         03h get file statistics
  219.         04h get time of day
  220.         05h set time of day
  221.         06h stat
  222.         07h system
  223. Program: GO32.EXE is a DOS extender included as part of the 80386 port of the
  224.       GNU C/C++ compiler by DJ Delorie and distributed as DJGPP
  225. SeeAlso: INT 10/AH=FFh"GO32"
  226. --------K-21FF-------------------------------
  227. INT 21 - DOSED.COM - INSTALLATION CHECK
  228.     AH = FFh
  229.     DS:SI -> "DOSED"
  230.     ES = 0000h
  231. Return: ES:DI -> "DOSED" if installed
  232. Program: DOSED is a free DOS commandline editor/history buffer by Sverre H.
  233.       Huseby
  234. --------v-21FF-------------------------------
  235. INT 21 - VIRUS - "Sunday", "Tumen 0.5", "Hero" - INSTALLATION CHECK
  236.     AH = FFh
  237. Return: AH = 00h if "Tumen 0.5" or "Hero" resident
  238.     AX = 0400h if "Sunday" resident
  239. SeeAlso: AX=FEDCh"VIRUS",AX=FF01h"VIRUS"
  240. --------E-21FF-------------------------------
  241. INT 21 UP - Rational Systems DOS/4GW - API
  242.     AH = FFh
  243.     DH = function (00h-17h) (see also separate entries below)
  244.     DL = subfunction or argument
  245. Return: CF clear if valid function number
  246.         AX = status???
  247.     CF set if invalid function
  248. SeeAlso: INT 15/AX=BFDCh
  249. --------E-21FF--DH00-------------------------
  250. INT 21 UP - Rational Systems DOS/4GW - GET VERSION???
  251.     AH = FFh
  252.     DH = 00h
  253.     DL = ??? (78h seen)
  254. Return: CF clear
  255.     EAX = 4734FFFFh (high word is byte-swapped "4G") if DOS/4G installed
  256. Note:    Quarterdeck's DESQview/X X Toolkit library uses this call to determine
  257.       whether the direct-mapped linear 4GB segment's selector is 34h or 38h
  258. SeeAlso: INT 21/AH=FFh"DOS/4GW"
  259. --------E-21FF--DH02-------------------------
  260. INT 21 UP - Rational Systems DOS/4GW - SET ???
  261.     AH = FFh
  262.     DH = 02h
  263.     DL = ???
  264. Return: CF clear
  265. --------E-21FF--DH05-------------------------
  266. INT 21 UP - Rational Systems DOS/4GW - ???
  267.     AH = FFh
  268.     DH = 05h
  269.     BX = ???
  270. Return: ???
  271. --------E-21FF--DH06-------------------------
  272. INT 21 UP - Rational Systems DOS/4GW - ???
  273.     AH = FFh
  274.     DH = 06h
  275.     BX = ???
  276. Return: ???
  277. --------E-21FF--DH07-------------------------
  278. INT 21 UP - Rational Systems DOS/4GW - ???
  279.     AH = FFh
  280.     DH = 07h
  281.     BX = ???
  282. Return: ???
  283. --------E-21FF--DH08-------------------------
  284. INT 21 UP - Rational Systems DOS/4GW - ???
  285.     AH = FFh
  286.     DH = 08h
  287.     BX = ???
  288.     CX = ???
  289.     ES = ???
  290. Return: ???
  291. --------E-21FF--DH09-------------------------
  292. INT 21 UP - Rational Systems DOS/4GW - GET ???
  293.     AH = FFh
  294.     DH = 09h
  295. Return: ES:BX -> ???
  296. --------E-21FF--DH0A-------------------------
  297. INT 21 UP - Rational Systems DOS/4GW - ???
  298.     AH = FFh
  299.     DH = 0Ah
  300.     AL = ???
  301.     BX = ???
  302.     CX = ???
  303. Return: ES = ??? or 0000h
  304. --------E-21FF--DH0B-------------------------
  305. INT 21 UP - Rational Systems DOS/4GW - ???
  306.     AH = FFh
  307.     DH = 0Bh
  308.     AL = ???
  309.     BX = ???
  310.     CX = ???
  311. Return: ???
  312. --------E-21FF--DH0C-------------------------
  313. INT 21 UP - Rational Systems DOS/4GW - GET/SET ???
  314.     AH = FFh
  315.     DH = 0Ch
  316.     DL = ??? (00h or 01h)
  317. Return: CF clear if successful
  318.         AL = previous value of ???
  319.     CF set on error (DL out of range)
  320.         AX = FFFFh
  321. --------E-21FF--DH0D-------------------------
  322. INT 21 UP - Rational Systems DOS/4GW - ???
  323.     AH = FFh
  324.     DH = 0Dh
  325.     ???
  326. Return: ???
  327. --------E-21FF--DH0E-------------------------
  328. INT 21 UP - Rational Systems DOS/4GW - ???
  329.     AH = FFh
  330.     DH = 0Eh
  331. Return: DX:AX -> XBRK structure (see #0400 at INT 15/AX=BF02h)
  332.     BX = ???
  333.     CX = ???
  334. SeeAlso: INT 15/AX=BF02h
  335. --------E-21FF--DH0F-------------------------
  336. INT 21 UP - Rational Systems DOS/4GW - ???
  337.     AH = FFh
  338.     DH = 0Fh
  339.     ???
  340. Return: ???
  341. --------E-21FF--DH10-------------------------
  342. INT 21 UP - Rational Systems DOS/4GW - ???
  343.     AH = FFh
  344.     DH = 10h
  345.     AL = ???
  346.     BX = ???
  347.     CX = ???
  348.     DI = ???
  349.     SI = ???
  350. Return: ???
  351. Note:    among other things, frees two memory blocks via INT 21/AH=49h
  352. --------E-21FF--DH11-------------------------
  353. INT 21 UP - Rational Systems DOS/4GW - NOP
  354.     AH = FFh
  355.     DH = 11h
  356. --------E-21FF--DH12-------------------------
  357. INT 21 UP - Rational Systems DOS/4GW - EXCHANGE ??? POINTERS
  358.     AH = FFh
  359.     DH = 12h
  360.     DS:SI -> new ???
  361.     ES:DI -> new ???
  362. Return: DS:SI -> previous ???
  363.     ES:DI -> previous ???
  364. --------E-21FF--DH13-------------------------
  365. INT 21 UP - Rational Systems DOS/4GW - ???
  366.     AH = FFh
  367.     DH = 13h
  368.     AL = ???
  369.     ES = ???
  370. Return: ???
  371. --------E-21FF--DH14-------------------------
  372. INT 21 UP - Rational Systems DOS/4GW - ???
  373.     AH = FFh
  374.     DH = 14h
  375.     BX = ???
  376.     CX = ???
  377. Return: CF clear
  378.         AX = ???
  379.         DX = ???
  380. --------E-21FF--DH15-------------------------
  381. INT 21 UP - Rational Systems DOS/4GW - GET ??? FUNCTIONS
  382.     AH = FFh
  383.     DH = 15h
  384. Return: CF clear
  385.         DX:AX -> FAR function for ???
  386.         CX:BX -> FAR function for ???
  387.         SI:DI -> FAR function for ???
  388. --------E-21FF--DH16-------------------------
  389. INT 21 UP - Rational Systems DOS/4GW - GET ???
  390.     AH = FFh
  391.     DH = 16h
  392. Return: AX = ???
  393. --------E-21FF--DH17-------------------------
  394. INT 21 UP - Rational Systems DOS/4GW - ???
  395.     AH = FFh
  396.     DH = 17h
  397.     AL = ???
  398.     DL = ???
  399. Return: ???
  400. --------N-21FF00-----------------------------
  401. INT 21 - TopWare Network OS v5.10+ - GET SYSTEM INFORMATION
  402.     AX = FF00h
  403.     CL = what to get
  404.         00h user information (see #1781)
  405.         01h drive mapping (see #1782)
  406.         02h printer server(s)
  407.         05h local DOS drive number
  408. Return: ES:BX -> desired information
  409. Program: TopWare Network Operating System is manufactured by Grand Computer
  410.       Company
  411. Note:    this call is only supported on Workstations, not on the server
  412. SeeAlso: AX=FF04h,INT 2F/AX=FF00h
  413.  
  414. Format of TopWare user information:
  415. Offset    Size    Description    (Table 1781)
  416.  00h    BYTE    node ID
  417.  01h 15 BYTEs    user name
  418.  10h    WORD    user number
  419.  12h    BYTE    group number
  420.  
  421. Format of TopWare drive mapping [array]:
  422. Offset    Size    Description    (Table 1782)
  423.  00h    BYTE    bits 6-0: drive number (1=A:, etc.)
  424.         bit 7: this is a server drive
  425.  01h  3 BYTEs    mapping drive (for example, "C:\")
  426.  04h 64 BYTEs    current directory
  427. --------E-21FF00DX0078-----------------------
  428. INT 21 - Rational Systems DOS/4G - INSTALLATION CHECK
  429.     AX = FF00h
  430.     DX = 0078h
  431. Return: AL <> 00h if installed
  432.         GS = segment of kernel if nonzero
  433. SeeAlso: INT 15/AX=BF02h
  434. --------v-21FF01-----------------------------
  435. INT 21 - VIRUS - "Drop" - INSTALLATION CHECK
  436.     AX = FF01h
  437. Return: AX = 01FFh if resident
  438. SeeAlso: AH=FEh"VIRUS",AX=FF0Fh"VIRUS"
  439. --------N-21FF04-----------------------------
  440. INT 21 - TopWare Network OS v5.10+ - GET/SET DEFAULT FILE PROTECTION ATTRIBS
  441.     AX = FF04h
  442.     CL = function
  443.         00h get protections
  444.         Return: BH = read attribute
  445.             BL = write attribute
  446.         01h set protections
  447.         BH = read attribute
  448.         BL = write attribute
  449. Note:    this function is supported only on Workstations, not on the server
  450. SeeAlso: AX=FF00h"TopWare"
  451. --------v-21FF0F-----------------------------
  452. INT 21 - FLU_SHOT+ v1.83 - INSTALLATION CHECK
  453.     AX = FF0Fh
  454. Return: AX = 0101h if resident
  455. Program: FLU_SHOT+ is an antivirus/antitrojan program by Ross M. Greenberg and
  456.       Software Concepts Design
  457. Note:    the "PSQR/1720" virus calls this function to determine whether
  458.       FLU_SHOT+ is present
  459. SeeAlso: AH=FFh"VIRUS",AX=FF10h
  460. --------v-21FF10-----------------------------
  461. INT 21 - VIRUS - "Twins" - INSTALLATION CHECK
  462.     AX = FF10h
  463. Return: AL = 07h if resident
  464. SeeAlso: AX=FF0Fh,AX=FFFEh
  465. --------N-21FF80DHFF-------------------------
  466. INT 21 - TopWare Network OS v5.10+ - SEND MESSAGE
  467.     AX = FF80h
  468.     DH = FFh
  469.     DL = destination address (FFh for broadcast)
  470.     CX = message length (max 2000)
  471.     DS:SI -> message to be sent (see #1783)
  472. Return: nothing
  473. Program: TopWare Network Operating System is manufactured by Grand Computer
  474.       Company
  475. Notes:    this function is supported on both Workstations and the server
  476.     there is no guarantee that the message will be received correctly, or
  477.       at all, by the destination
  478.  
  479. Format of TopWare message:
  480. Offset    Size    Description    (Table 1783)
  481.  00h    BYTE    type code
  482.         07h TopSend
  483.         11h user application
  484.         other reserved for TopWare
  485.  01h    var    data
  486. Note:    sending messages with a type code other than 11h will cause
  487.       unpredictable results
  488. --------N-21FF82-----------------------------
  489. INT 21 - TopWare Network OS v5.10+ - GET STATION ADDRESS
  490.     AX = FF82h
  491. Return: AL = station address
  492. Note:    this function is supported on both Workstations and the server
  493. SeeAlso: AX=FF91h
  494. --------N-21FF8C-----------------------------
  495. INT 21 - TopWare Network OS v5.10+ - GET STATUS OF TopShow/Emulated FUNCTION
  496.     AX = FF8Ch
  497.     BL = subfunction
  498.         00h get TopShow status
  499.         FFh get Emulated status
  500. Return: AL = status
  501.         00h not installed
  502.         01h already installed
  503. --------N-21FF8D-----------------------------
  504. INT 21 - TopWare Network OS v5.10+ - CALL TopShow FUNCTION
  505.     AX = FF8Dh
  506.     CH = monochrome flag (01h monochrome, 00h not monochrome)
  507.     CL = screen mode of station to be viewed (see #1784)
  508.     BL = graphic page number for monochrome
  509. Return: AL = status (00h successful, else failed)
  510. SeeAlso: AX=FF8Eh,AX=FFCFh
  511.  
  512. (Table 1784)
  513. Values for TopWare screen mode:
  514.  00h    text mode
  515.  01h    720x348
  516.  02h    640x408
  517.  03h    720x352
  518.  04h    640x390
  519.  05h    reserved
  520. --------N-21FF8E-----------------------------
  521. INT 21 - TopWare Network OS v5.10+ - CANCEL TopShow FUNCTION
  522.     AX = FF8Eh
  523. Return: AL = 00h (successful, TopShow removed)
  524. SeeAlso: AX=FF8Dh
  525. --------N-21FF91-----------------------------
  526. INT 21 - TopWare Network OS v5.10+ - GET FILE SERVER STATION NUMBER
  527.     AX = FF91h
  528. Return: AL = station number of file server
  529. SeeAlso: AX=FF82h
  530. --------N-21FF97-----------------------------
  531. INT 21 - TopWare Network OS v5.10+ - GET MAXIMUM STATION NUMBER (server only)
  532.     AX = FF97h
  533. Return: AL = maximum station number
  534. SeeAlso: AX=FF98h
  535. --------N-21FF98-----------------------------
  536. INT 21 - TopWare Network OS v5.10+ - GET MAXIMUM FILE NUMBER (server only)
  537.     AX = FF98h
  538. Return: AL = maximum file
  539. SeeAlso: AX=FF97h
  540. --------N-21FF9A-----------------------------
  541. INT 21 - TopWare Network OS v5.10+ - RECEIVE OF USER-DEFINED PACKETS
  542.     AX = FF9Ah
  543.     ES:BX -> buffer for user-defined packet (see #1785)
  544. Return: nothing
  545.  
  546. Format of TopWare user-defined packet:
  547. Offset    Size    Description    (Table 1785)
  548.  00h    BYTE    FFh
  549.  01h    WORD    (call) length of data field plus 3
  550.         (ret) length of received message (0000h if none received)
  551.  03h    BYTE    destination ID (FFh for broadcast message)
  552.  04h    BYTE    sending station ID
  553.  05h    BYTE    type code (11h; all other codes reserved for TopWare)
  554.  06h  N BYTEs    received message
  555. --------N-21FF9F-----------------------------
  556. INT 21 - TopWare Network OS v5.10+ - ENABLE/DISABLE TopTerm SERVICE
  557.     AX = FF9Fh
  558.     CL = new state (00h disable [disregard TopTerm packets], 01h enable)
  559. Return: AL = status (00h successful, FFh failed)
  560. Note:    this function is only supported by Workstations, not the server
  561. --------N-21FFB0-----------------------------
  562. INT 21 - TopWare Network OS v5.10+ - GET SPOOLER PRINTING PRIORITY
  563.     AX = FFB0h
  564. Return: AL = priority status (see #1786)
  565. SeeAlso: AX=FFB1h
  566.  
  567. Bitfields for TopWare printer priority status:
  568. Bit(s)    Description    (Table 1786)
  569.  2    LPT3 has high priority
  570.  1    LPT2 has high priority
  571.  0    LPT1 has high priority
  572. --------N-21FFB1-----------------------------
  573. INT 21 - TopWare Network OS v5.10+ - SET SPOOLER PRINTING PRIORITY
  574.     AX = FFB1h
  575.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  576.     CH = new priority (00h normal, 01h high)
  577. Return: nothing
  578. SeeAlso: AX=FFB0h
  579. --------N-21FFB3-----------------------------
  580. INT 21 - TopWare Network OS v5.10+ - GET DEFAULT START-OF-JOB FORMFEED STATUS
  581.     AX = FFB3h
  582. Return: AL = starting formfeed status (see #1787)
  583. SeeAlso: AX=FFB4h,AX=FFC0h
  584.  
  585. Bitfields for TopWare printer start-of-job formfeed status:
  586. Bit(s)    Description    (Table 1787)
  587.  2    LPT3 has formfeed enabled
  588.  1    LPT2 has formfeed enabled
  589.  0    LPT1 has formfeed enabled
  590. --------N-21FFB4-----------------------------
  591. INT 21 - TopWare Network OS v5.10+ - SET DEFAULT START-OF-JOB FORMFEED STATUS
  592.     AX = FFB4h
  593.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  594.     CH = new formfeed status (00h off, 01h on)
  595. Return: nothing
  596. SeeAlso: AX=FFB3h,AX=FFC1h
  597. --------N-21FFBB-----------------------------
  598. INT 21 - TopWare Network OS v5.10+ - GET PRINTER SERVER STATION ADDRESS
  599.     AX = FFBBh
  600.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  601. Return: AL = current mapping printer server station number
  602.         00h if local
  603. SeeAlso: AX=FFBCh
  604. --------N-21FFBC-----------------------------
  605. INT 21 - TopWare Network OS v5.10+ - CANCEL TopShow FUNCTION
  606.     AX = FFBCh
  607.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  608.     CL = printer server station address or 00h for local printer
  609. Return: AL = status (00h successful, else failed)
  610. SeeAlso: AX=FFBBh
  611. --------N-21FFBD-----------------------------
  612. INT 21 - TopWare Network OS v5.10+ - GET CURRENT AUTOPRINT TIME
  613.     AX = FFBDh
  614.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  615. Return: AX = current AutoPrint timeout in clock ticks
  616. SeeAlso: AX=FFBEh
  617. --------N-21FFBE-----------------------------
  618. INT 21 - TopWare Network OS v5.10+ - SET AUTOPRINT TIME
  619.     AX = FFBEh
  620.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  621.     BX = timeout in clock ticks
  622. SeeAlso: AX=FFBDh
  623. --------N-21FFBF-----------------------------
  624. INT 21 - TopWare Network OS v5.10+ - GET LOGON USER INFORMATION
  625.     AX = FFBFh
  626.     DX:BX -> buffer for logon information (see #1788)
  627. Return: AL = status (00h successful, else failed)
  628.     AH = number of logged-in stations
  629.  
  630. Format of TopWare logon information:
  631. Offset    Size    Description    (Table 1788)
  632.  00h    BYTE    station address
  633.  01h 15 BYTEs    username
  634. --------N-21FFC0-----------------------------
  635. INT 21 - TopWare Network OS v5.10+ - GET DEFAULT END-OF-JOB FORMFEED STATUS
  636.     AX = FFC0h
  637. Return: AL = ending formfeed status (see #1789)
  638. SeeAlso: AX=FFB3h,AX=FFC1h
  639.  
  640. Bitfields for TopWare printer end-of-job formfeed status:
  641. Bit(s)    Description    (Table 1789)
  642.  2    LPT3 has formfeed enabled
  643.  1    LPT2 has formfeed enabled
  644.  0    LPT1 has formfeed enabled
  645. --------N-21FFC1-----------------------------
  646. INT 21 - TopWare Network OS v5.10+ - SET DEFAULT END-OF-JOB FORMFEED STATUS
  647.     AX = FFC1h
  648.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  649.     CH = new formfeed status (00h off, 01h on)
  650. Return: nothing
  651. SeeAlso: AX=FFB4h,AX=FFC0h
  652. --------N-21FFC2-----------------------------
  653. INT 21 - TopWare Network OS v5.10+ - GET DEFAULT COPIES OF SPOOLING FILE
  654.     AX = FFC2h
  655.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  656. Return: AL = default number of copies printed
  657. SeeAlso: AX=FFC7h
  658. --------N-21FFC3-----------------------------
  659. INT 21 - TopWare Network OS v5.10+ - GET SHARING STATUS OF PRINTER SERVER
  660.     AX = FFC3h
  661. Return: AL = sharing status of printers (see #1790)
  662.         FFh if not a printer server
  663.  
  664. Bitfields for TopWare printer sharing status:
  665. Bit(s)    Description    (Table 1790)
  666.  2    LPT3 is shared
  667.  1    LPT2 is shared
  668.  0    LPT1 is shared
  669. --------N-21FFC4-----------------------------
  670. INT 21 - TopWare Network OS v5.10+ - GET/SET LPT PORT ON PRINT SERVER
  671.     AX = FFC4h
  672.     BL = subfunction
  673.         00h get
  674.         Return: AL = mapped printer port on print server
  675.         01h set
  676.         CL = network printer port (00h LPT1, 01h LPT2, 02h LPT3)
  677.     CH = local printer (00h LPT1, 01h LPT2, 02h LPT3)
  678. --------N-21FFC6-----------------------------
  679. INT 21 - TopWare Network OS v5.10+ - SET DEFAULT PRINT FILE HEADER
  680.     AX = FFC6h
  681.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  682.     CL = header state (00h off, 01h on)
  683. SeeAlso: AX=FFC8h
  684. --------N-21FFC7-----------------------------
  685. INT 21 - TopWare Network OS v5.10+ - SET DEFAULT PRINT COPIES
  686.     AX = FFC7h
  687.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  688.     CL = new default number of copies to print
  689. SeeAlso: AX=FFC2h
  690. --------N-21FFC8-----------------------------
  691. INT 21 - TopWare Network OS v5.10+ - GET DEFAULT PRINT FILE HEADER STATUS
  692.     AX = FFC8h
  693. Return: AL = header status for printers (see #1791)
  694. SeeAlso: AX=FFC6h
  695.  
  696. Bitfields for TopWare print header status:
  697. Bit(s)    Description    (Table 1791)
  698.  2    LPT3 has headers enabled
  699.  1    LPT2 has headers enabled
  700.  0    LPT1 has headers enabled
  701. --------N-21FFC9-----------------------------
  702. INT 21 - TopWare Network OS v5.10+ - SET PRINTER SHARING
  703.     AX = FFC9h
  704.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  705.     CL = new sharing state (00h off, 01h on)
  706. Return: AL = status (00h successful, FFh not printer server)
  707. --------N-21FFCA-----------------------------
  708. INT 21 - TopWare Network OS v5.10+ - MOVE FILE FROM ONE PRINT SERVER TO ANOTHER
  709.     AX = FFCAh
  710.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  711.     CL = original printer server station address
  712.     BL = target printer server station address
  713.     DS:DX -> filename (12 bytes)
  714. Return: AL = status (00h successful, else failed)
  715. SeeAlso: AX=FFCBh
  716. --------N-21FFCB-----------------------------
  717. INT 21 - TopWare Network OS v5.10+ - DELETE FILE FROM SPOOLING QUEUE
  718.     AX = FFCBh
  719.     CH = printer number (00h LPT1, 01h LPT2, 02h LPT3)
  720.     CL = printer server station address
  721.     DS:DX -> filename (12 bytes)
  722. Return: AL = status (00h successful, else failed)
  723. SeeAlso: AX=FFCAh
  724. --------N-21FFCC-----------------------------
  725. INT 21 - TopWare Network OS v5.10+ - GET PRINT SERVER'S SPOOLING QUEUE STATUS
  726.     AX = FFCCh
  727.     CL = printer server station address
  728.     BH = start item number of spooling file for print server
  729.     BL = number of the item to be retrieved
  730.     DS:DX -> buffer for queued file information (see #1792)
  731. Return: AL = status
  732.         00h successful
  733.         AH = number of spool files
  734.         DS:DX buffer filled
  735.         nonzero failed
  736.  
  737. Format of TopWare queued file information buffer [16-item array, one element]:
  738. Offset    Size    Description    (Table 1792)
  739.  00h 12 BYTEs    filename
  740.  0Ch    DWORD    size
  741.  10h    WORD    date
  742.  12h    WORD    time
  743.  14h 15 BYTEs    username
  744.  23h    BYTE    count
  745.  24h    BYTE    flag: header
  746.  25h    BYTE    print number
  747. --------N-21FFCD-----------------------------
  748. INT 21 - TopWare Network OS v5.10+ - GET STATUS OF ALL PRINT SERVERS
  749.     AX = FFCDh
  750.     DS:DX -> buffer for server status (see #1793)
  751. Return: AL = status
  752.         00h successful
  753.         AH = number of print servers
  754.         nonzero failed
  755.  
  756. Format of TopWare server status:
  757. Offset    Size    Description    (Table 1793)
  758.  00h    BYTE    station address
  759.  01h 15 BYTEs    username
  760.  10h    BYTE    flag: 01h printer is shared, 00h sharing disabled
  761.  11h    BYTE    number of files pending in queue
  762. --------N-21FFCF-----------------------------
  763. INT 21 - TopWare Network OS v5.10+ - CALL TopLook FUNCTION
  764.     AX = FFCFh
  765.     DH = page number (0-2, 2 is text mode)
  766.     DL = type
  767.         00h look at specific screen
  768.         01h AutoLook on
  769.         FFh AutoLook off
  770.     BH = station number wishing to look
  771.     BL = station number to be looked at
  772.     CH = monochrome flag (01h monochrome, 00h not monochrome)
  773.     CL = screen mode (see #1784)
  774. Return: AL = status (00h successful, nonzero failed)
  775. SeeAlso: AX=FF8Dh
  776. --------N-21FFD6-----------------------------
  777. INT 21 - TopWare Network OS v5.10+ - GET KEYCARD SERIAL NUMBER AND MAX USERS
  778.     AX = FFD6h
  779.     ES:BX -> 12-byte buffer for keycard serial number
  780. Return: CX = maximum number of users
  781.     ES:BX buffer filled
  782. --------N-21FFD7-----------------------------
  783. INT 21 - TopWare Network OS v5.10+ - GET NETWORK PROTECTION ATTRIBUTES STATUS
  784.     AX = FFD7h
  785. Return: AL = status (00h disabled, 01h enabled)
  786. --------N-21FFE3DL00-------------------------
  787. INT 21 - TopWare Network OS v5.10+ - INITIATE ACCESS TO SPECIFIC PACKET TYPE
  788.     AX = FFE3h
  789.     DL = 00h
  790.     BX = packet type for Ethernet header (IP = 0800h, ARP = 0806h, etc.)
  791.     ES:DI -> receive routine (see #1795)
  792. Return: CF clear if successful
  793.         AX = handle number
  794.     CF set on error
  795.         DH = error code (03h,05h,09h,0Ah,11h) (see #1794)
  796. SeeAlso: AX=FFE3h/DL=01h
  797.  
  798. (Table 1794)
  799. Values for TopWare error code:
  800.  01h    invalid handle
  801.  03h    no interfaces of the specified type found
  802.  05h    bad packet type
  803.  09h    insufficient space
  804.  0Ah    type already being accessed
  805.  0Ch    unable to send packet (usually hardware error)
  806.  11h    invalid function
  807.  
  808. (Table 1795)
  809. Values TopWare receive routine is called with:
  810.     AX = function
  811.         0000h request packet buffer
  812.         CX = packet size
  813.         Return: ES:DI -> buffer or 0000h:0000h to discard packet
  814.         0001h packet copied
  815.         CX = packet size
  816.         DS:SI -> copied packet (same as returned ES:DI above)
  817. --------N-21FFE3DL01-------------------------
  818. INT 21 - TopWare Network OS v5.10+ - END ACCESS TO SPECIFIC PACKET TYPE
  819.     AX = FFE3h
  820.     DL = 01h
  821.     BX = handle returned by AX=FFE3h/DL=00h
  822. Return: CF clear if successful
  823.     CF set on error
  824.         DH = error code (01h,11h) (see #1794)
  825. Note:    the specified access handle will no longer be valid after this call
  826. SeeAlso: AX=FFE3h/DL=00h
  827. --------N-21FFE3DL02-------------------------
  828. INT 21 - TopWare Network OS v5.10+ - SEND PACKET
  829.     AX = FFE3h
  830.     DL = 02h
  831.     CX = length of data buffer
  832.     DS:SI -> buffer containing data
  833. Return: CF clear if successful
  834.     CF set on error
  835.         DH = error code (0Ch,11h) (see #1794)
  836. --------N-21FFE3DL03-------------------------
  837. INT 21 - TopWare Network OS v5.10+ - GET LOCAL NETWORK INTERFACE ADDRESS
  838.     AX = FFE3h
  839.     DL = 03h
  840.     ES:DI -> 6-byte buffer for address
  841. SeeAlso: AX=FFE3h/DL=00h
  842. --------v-21FFFE-----------------------------
  843. INT 21 - VIRUS - "08/15"/"Many Fingers" - INSTALLATION CHECK
  844.     AX = FFFEh
  845. Return: AX = 0815h if resident
  846. SeeAlso: AX=FF10h,AX=FFFEh/BX=0000h
  847. --------v-21FFFEBX0000-----------------------
  848. INT 21 - VIRUS - "Anti-Thunderbyte/LEMMING" - INSTALLATION CHECK
  849.     AX = FFFEh
  850.     BX = 0000h
  851. Return: BX = FFFFh if resident
  852. SeeAlso: AX=FFFEh,AX=FFFFh
  853. --------v-21FFFF-----------------------------
  854. INT 21 - VIRUS - "Ontario", "Year 1992"/"B1M92" - INSTALLATION CHECK
  855.     AX = FFFFh
  856. Return: AX = 0000h if "Ontario" resident
  857.     AX = 1992h if "Year 1992"/"B1M92" resident
  858. SeeAlso: AX=FF0Fh,AX=FFFFh/CX=0000h,INT 6B"VIRUS"
  859. --------v-21FFFFCX0000-----------------------
  860. INT 21 - VIRUS - "Revenge" - INSTALLATION CHECK
  861.     AX = FFFFh
  862.     CX = 0000h
  863. Return: CX = 0006h if resident
  864. SeeAlso: AX=FFFFh,INT 6B"VIRUS"
  865. --------D-22---------------------------------
  866. INT 22 - DOS 1+ - PROGRAM TERMINATION ADDRESS
  867. Desc:    this vector specifies the address of the routine which is to be given
  868.       control after a program is terminated; it should never be called
  869.       directly, since it does not point at an interrupt handler
  870. Notes:    this vector is restored from the DWORD at offset 0Ah in the PSP during
  871.       termination, and then a FAR JMP is performed to the address in INT 22
  872.     normally points at the instruction immediately following INT 21/AH=4Bh
  873.       call which loaded the current program
  874. SeeAlso: INT 20,INT 21/AH=00h,INT 21/AH=31h,INT 21/AH=4Ch
  875. --------G-22---------------------------------
  876. INT 22 - COMTROL HOSTESS i/ISA DEBUGGER - CHANGE FIRMWARE DEBUGGING PORT
  877.     AL = new firmware debugging port
  878. Return: ???
  879. SeeAlso: INT 21"COMTROL",INT 23"COMTROL"
  880. --------D-23---------------------------------
  881. INT 23 - DOS 1+ - CONTROL-C/CONTROL-BREAK HANDLER
  882. ---DOS 1.x---
  883. Return: AH = 00h abort program
  884.     if all registers preserved, restart DOS call
  885. ---DOS 2+---
  886.     CF clear
  887. Return: all registers preserved
  888.     return via RETF with CF set or (MS-DOS 1,DR DOS) RETF 2 with CF set
  889.         DOS will abort program with errorlevel 0
  890.     else (RETF/RETF 2 with CF clear or IRET with CF ignored)
  891.         interrupted DOS call is restarted
  892. Notes:    this interrupt is invoked whenever DOS detects a ^C or ^Break; it
  893.       should never be called directly
  894.     MS-DOS 1.25 also invokes INT 23 on a divide overflow (INT 00)
  895.     MS-DOS remembers the stack pointer before calling INT 23, and if it is
  896.       not the same on return, pops and discards the top word; this is what
  897.       permits a return with RETF as well as IRET or RETF 2
  898.     MS-DOS 2.1+ ignores the returned CF if SP is the same on return as it
  899.       was when DOS called INT 23, so RETF 2 will not terminate the program
  900.     Novell DOS 7 always pops a word if CF is set on return, so one should
  901.       not return with RETF 2 and CF set or IRET with the stored flags' CF
  902.       set
  903.     any DOS call may safely be made within the INT 23 handler, although
  904.       the handler must check for a recursive invocation if it does
  905.       call DOS
  906. SeeAlso: INT 1B
  907. --------G-23---------------------------------
  908. INT 23 - COMTROL HOSTESS i/ISA DEBUGGER - GET CONFIGURATION INFORMATION
  909.     AL = query type
  910.         00h get old config map
  911.         Return: AX = old config map
  912.         01h get dual-ported RAM map
  913.         Return: BX:AX = dual-ported RAM map
  914.         02h get SCC port map
  915.         Return: BX:AX = SCC port map
  916. SeeAlso: INT 22"COMTROL",INT 26"COMTROL"
  917. --------D-24---------------------------------
  918. INT 24 C - DOS 1+ - CRITICAL ERROR HANDLER
  919. Notes:    invoked when a critical (usually hardware) error is encountered by DOS
  920.       (see #1796); should never be called directly
  921.     when DOS terminates a program, it copies the previous value of the
  922.       INT 24 vector out of the PSP (see #0677) and into the interrupt
  923.       vector table
  924. SeeAlso: INT 21/AH=95h
  925.  
  926. (Table 1796)
  927. Values critical error handler is called with:
  928.     AH = type and processing flags (see #1797)
  929.     AL = drive number if AH bit 7 clear
  930.     BP:SI -> device driver header (see #0933 at INT 21/AH=52h)
  931.         (BP:[SI+4] bit 15 set if character device)
  932.     DI low byte contains error code if AH bit 7 set (see #1798)
  933.     STACK:    DWORD    return address for INT 24 call
  934.         WORD    flags pushed by INT 24
  935.         WORD    original AX on entry to INT 21
  936.         WORD    BX
  937.         WORD    CX
  938.         WORD    DX
  939.         WORD    SI
  940.         WORD    DI
  941.         WORD    BP
  942.         WORD    DS
  943.         WORD    ES
  944.         DWORD    return address for INT 21 call
  945.         WORD    flags pushed by INT 21
  946. Return:    AL = action code (see #1799)
  947.     SS,SP,DS,ES,BX,CX,DX preserved
  948. Notes:    the only DOS calls the handler may make are INT 21/AH=01h-0Ch,30h,59h
  949.     if the handler returns to the application by popping the stack, DOS
  950.       will be in an unstable state until the first call with AH > 0Ch
  951.     for DOS 3.1+, IGNORE (AL=00h) is turned into FAIL (AL=03h) on network
  952.       critical errors
  953.     if IGNORE specified but not allowed, it is turned into FAIL
  954.     if RETRY specified but not allowed, it is turned into FAIL
  955.     if FAIL specified but not allowed, it is turned into ABORT
  956.     (DOS 3.0+) if a critical error occurs inside the critical error
  957.       handler, the DOS call is automatically failed (AL set to 03h and
  958.       the INT 24 call skipped)
  959.  
  960. Bitfields for critical error type and processing flags:
  961. Bit(s)    Description    (Table 1797)
  962.  7    clear = disk I/O error
  963.     set   = -- if block device, bad FAT image in memory
  964.         -- if char device, error code in DI
  965.  6    unused
  966.  5    Ignore allowed (DOS 3.0+)
  967.  4    Retry allowed (DOS 3.0+)
  968.  3    Fail allowed (DOS 3.0+)
  969.  2-1    disk area of error
  970.     00 = DOS area    01 = FAT
  971.     10 = root dir    11 = data area
  972.  0    set if write, clear if read
  973.  
  974. (Table 1798)
  975. Values for critical error code:
  976.  00h    write-protection violation attempted
  977.  01h    unknown unit for driver
  978.  02h    drive not ready
  979.  03h    unknown command given to driver
  980.  04h    data error (bad CRC)
  981.  05h    bad device driver request structure length
  982.  06h    seek error
  983.  07h    unknown media type
  984.  08h    sector not found
  985.  09h    printer out of paper
  986.  0Ah    write fault
  987.  0Bh    read fault
  988.  0Ch    general failure
  989.  0Dh    (DOS 3.0+) sharing violation
  990.  0Eh    (DOS 3.0+) lock violation
  991.  0Fh    invalid disk change
  992.  10h    (DOS 3.0+) FCB unavailable
  993.  11h    (DOS 3.0+) sharing buffer overflow
  994.  12h    (DOS 4.0+) code page mismatch
  995.  13h    (DOS 4.0+) out of input
  996.  14h    (DOS 4.0+) insufficient disk space
  997.  
  998. (Table 1799)
  999. Values for critical error handler action code:
  1000.  00h    ignore error and continue processing request
  1001.  01h    retry operation
  1002.  02h    terminate program as though INT 21/AH=4Ch called (INT 20h for DOS 1.x)
  1003.  03h    fail system call in progress (DOS 3+)
  1004. --------D-25---------------------------------
  1005. INT 25 - DOS 1+ - ABSOLUTE DISK READ (except partitions > 32M)
  1006.     AL = drive number (00h = A:, 01h = B:, etc)
  1007.     CX = number of sectors to read (not FFFFh)
  1008.     DX = starting logical sector number (0000h - highest sector on drive)
  1009.     DS:BX -> buffer for data
  1010. Return: CF clear if successful
  1011.     CF set on error
  1012.         AH = status (see #1800)
  1013.         AL = error code (same as passed to INT 24 in DI)
  1014.         AX = 0207h if more than 64K sectors on drive -- use new-style call
  1015.     may destroy all other registers except segment registers
  1016. Notes:    original flags are left on stack, and must be popped by caller
  1017.     this call bypasses the DOS filesystem
  1018.     examination of CPWIN386.CPL indicates that if this call fails with
  1019.       error 0408h on an old-style (<32M) call, one should retry the
  1020.       call with the high bit of the drive number in AL set
  1021.     Novell DOS 7 decides whether the old-style or new-style (>32M) version
  1022.       of INT 25 must be used solely on the basis of the partition's size,
  1023.       thus forcing use of the new-style call even for data in the first
  1024.       32M of the partition
  1025. BUGS:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  1026.       invalid drive number
  1027.     DR DOS 3.41 will return with a jump instead of RETF, leaving the
  1028.       wrong number of bytes on the stack; use the huge-partition version
  1029.       (INT 25/CX=FFFFh) for all partition sizes under DR DOS 3.41
  1030. SeeAlso: INT 13/AH=02h,INT 25/CX=FFFFh,INT 26
  1031.  
  1032. (Table 1800)
  1033. Values for disk I/O status:
  1034.  80h    device failed to respond (timeout)
  1035.  40h    seek operation failed
  1036.  20h    controller failed
  1037.  10h    data error (bad CRC)
  1038.  08h    DMA failure
  1039.  04h    requested sector not found
  1040.  03h    write-protected disk (INT 26 only)
  1041.  02h    bad address mark
  1042.  01h    bad command
  1043. --------D-25----CXFFFF-----------------------
  1044. INT 25 - DOS 3.31+ - ABSOLUTE DISK READ (>32M hard-disk partition)
  1045.     CX = FFFFh
  1046.     AL = drive number (0=A, 1=B, etc)
  1047.     DS:BX -> disk read packet (see #1801)
  1048. Return: CF clear if successful
  1049.     CF set on error
  1050.         AH = status (see #1800)
  1051.         AL = error code (same as passed to INT 24 in DI)
  1052.         AX = 0207h if more than 64K sectors on drive -- use new-style call
  1053.     may destroy all other registers except segment registers
  1054. Notes:    partition is potentially >32M (and requires this form of the call) if
  1055.       bit 1 of the device attribute word in the device driver is set
  1056.     original flags are left on stack, and must be removed by caller
  1057.     this call bypasses the DOS filesystem
  1058. SeeAlso: INT 13/AH=02h,INT 25,INT 26/CX=FFFFh
  1059.  
  1060. Format of disk read packet:
  1061. Offset    Size    Description    (Table 1801)
  1062.  00h    DWORD    sector number
  1063.  04h    WORD    number of sectors to read
  1064.  06h    DWORD    transfer address
  1065. --------k-25CDCD-----------------------------
  1066. INT 25 - Stacker - GET DEVICE DRIVER ADDRESS
  1067.     AX = CDCDh
  1068.     DS:BX -> buffer for address (see #1802)
  1069.     CX = 0001h
  1070.     DX = 0000h
  1071. Return: AX = CDCDh if Stacker installed
  1072.         DS:BX buffer filled
  1073. Note:    not supported by Stacker Anywhere; to obtain the Stacker device
  1074.       driver address and to detect drives controlled by all versions
  1075.       of Stacker, INT 21/AX=4404h"Stacker" or lookup via the CDS and DPB
  1076.       should be preferred (see INT 21/AH=52h)
  1077.     Stacker Anywhere does not link its built-in device driver into
  1078.       the standard device driver chain, but it can be found via CDS/DPB
  1079. SeeAlso: INT 21/AX=4404h"Stacker"
  1080.  
  1081. Format of Stacker v2+ driver address buffer:
  1082. Offset    Size    Description    (Table 1802)
  1083.  00h    WORD    signature CDCDh
  1084.  02h    WORD    ??? 0001h
  1085.  04h    DWORD    pointer to Stacker signature at device driver offset 1Ah
  1086.           (see #1803)
  1087.  
  1088. Format of Stacker v2+ device driver:
  1089. Offset    Size    Description    (Table 1803)
  1090.  00h    DWORD    pointer to next driver, offset=FFFFh if last driver
  1091.         FFFFh:FFFFh for Stacker Anywhere
  1092.  04h    WORD    device attributes (see #0934,#0935)
  1093.  06h    WORD    device strategy entry point
  1094.  08h    WORD    device interrupt entry point
  1095.  0Ah    BYTE    number of subunits (drives) supported by driver
  1096.         0 for Stacker Anywhere
  1097.  0Bh  7 BYTEs    signature "STAC-CD" for Stacker and Stacker Anywhere
  1098.  12h  7 BYTEs    ???
  1099.  19h    BYTE    always = 01h ?? (Stacker Anywhere points here)
  1100.  1Ah    WORD    signature A55Ah (all other Stacker versions point here)
  1101.  1Ch    WORD    Stacker version * 64h
  1102.         0C8h = 200, 012Ch = 300, 0190h = 400 (also Stacker Anywhere)
  1103.  1Eh    WORD    offset of volume-specific information offset table
  1104.         (list of WORDs, one per drive, containing offsets to various
  1105.           information)
  1106.  20h 56 BYTEs    n/a
  1107.  58h    BYTE    volume number, set after INT 21/AX=4404h, INT 21/AX=4408h
  1108.         (use to index into volume-specific info offset table,
  1109.         should be set to FFh before and tested for change after)
  1110.  59h 19 BYTEs    n/a
  1111.  6Ch  4 BYTEs    ASCII string "SWAP"
  1112.  70h 26 BYTEs    drive mapping table (one byte for each drive A: through Z:)
  1113.         (only used for drives swapped by SSWAP.COM; other drives
  1114.         compressed by Stacker can be found with the standard device
  1115.         driver header signature (see INT 21/AH=52h)
  1116. ---Stacker 4, Stacker Anywhere---
  1117.  8Ah 40    BYTEs    ???
  1118.  B2h  4 BYTEs    ASCII string "SWP2"
  1119.  B6h 26 BYTEs    drive table ???
  1120.  D0h 150 BYTEs    ???
  1121. 166h 60 BYTEs    LZSINFO structure (see #1996 at INT 2F/AX=4A12h)
  1122. SeeAlso: #1804,#0933 at INT 21/AH=52h
  1123.  
  1124. Format of Stacker boot record:
  1125. Offset    Size    Description    (Table 1804)
  1126. 1F0h  8 BYTEs    Stacker signature (first byte is CDh)
  1127. 1F8h    DWORD    pointer to start of Stacker device driver
  1128. 1FCh    WORD    Stacker volume number
  1129. 1FEh    WORD    ???
  1130. SeeAlso: #1803
  1131. --------c-25--FFSI4358-----------------------
  1132. INT 25 - PC-CACHE.SYS - INSTALLATION CHECK
  1133.     AL = FFh
  1134.     SI = 4358h
  1135. Return: SI = 6378h if installed
  1136.         CX = segment of device driver PC-CACHE.SYS
  1137.         DX = version (major in DH, minor in DL)
  1138. Program: PC-CACHE.SYS is a small device driver used by PC-Cache v5.x to obtain
  1139.       access to certain disk drivers for devices such as Bernoulli drives
  1140. SeeAlso: INT 13/AH=A0h
  1141. --------D-26---------------------------------
  1142. INT 26 - DOS 1+ - ABSOLUTE DISK WRITE (except partitions > 32M)
  1143.     AL = drive number (00h = A:, 01h = B:, etc)
  1144.     CX = number of sectors to write (not FFFFh)
  1145.     DX = starting logical sector number (0000h - highest sector on drive)
  1146.     DS:BX -> data to write
  1147. Return: CF clear if successful
  1148.     CF set on error
  1149.         AH = status (see #1800)
  1150.         AL = error code (same as passed to INT 24 in DI)
  1151.         AX = 0207h if more than 64K sectors on drive -- use new-style call
  1152.     may destroy all other registers except segment registers
  1153. Notes:    original flags are left on stack, and must be popped by caller
  1154.     this call bypasses the DOS filesystem, though DOS 5+ invalidates any
  1155.       disk buffers referencing sectors which are written with this call
  1156.     examination of CPWIN386.CPL indicates that if this call fails with
  1157.       error 0408h on an old-style (<32M) call, one should retry the
  1158.       call with the high bit of the drive number in AL set
  1159.     Novell DOS 7 decides whether the old-style or new-style (>32M) version
  1160.       of INT 26 must be used solely on the basis of the partition's size,
  1161.       thus forcing use of the new-style call even for data in the first
  1162.       32M of the partition
  1163. BUGS:    DOS 3.1 through 3.3 set the word at ES:[BP+1Eh] to FFFFh if AL is an
  1164.       invalid drive number
  1165.     DR DOS 3.41 will return with a jump instead of RETF, leaving the
  1166.       wrong number of bytes on the stack; use the huge-partition version
  1167.       (INT 26/CX=FFFFh) for all partition sizes under DR DOS 3.41
  1168. SeeAlso: INT 13/AH=03h,INT 25,INT 26/CX=FFFFh
  1169. --------D-26----CXFFFF-----------------------
  1170. INT 26 - DOS 3.31+ - ABSOLUTE DISK WRITE (>32M hard-disk partition)
  1171.     CX = FFFFh
  1172.     AL = drive number (0=A, 1=B, etc)
  1173.     DS:BX -> disk write packet (see #1805)
  1174. Return: CF clear if successful
  1175.     CF set on error
  1176.         AH = status (see #1800)
  1177.         AL = error code (same as passed to INT 24 in DI)
  1178.         AX = 0207h if more than 64K sectors on drive -- use new-style call
  1179.     may destroy all other registers except segment registers
  1180. Notes:    partition is potentially >32M (and requires this form of the call) if
  1181.       bit 1 of the device attribute word in the device driver is set
  1182.     original flags are left on stack, and must be removed by caller
  1183.     this call bypasses the DOS filesystem, though DOS 5+ invalidates any
  1184.       disk buffers referencing sectors which are written with this call
  1185. SeeAlso: INT 13/AH=03h,INT 25/CX=FFFFh,INT 26
  1186.  
  1187. Format of disk write packet:
  1188. Offset    Size    Description    (Table 1805)
  1189.  00h    DWORD    sector number
  1190.  04h    WORD    number of sectors to read
  1191.  06h    DWORD    transfer address
  1192. --------G-26---------------------------------
  1193. INT 26 - COMTROL HOSTESS i/ISA DEBUGGER - ENTER/EXIT EXTENDED ADDRESSING MODE
  1194.     ???
  1195. Return: ???
  1196. SeeAlso: INT 23"COMTROL",INT 27"COMTROL"
  1197. --------D-27---------------------------------
  1198. INT 27 - DOS 1+ - TERMINATE AND STAY RESIDENT
  1199.     DX = number of bytes to keep resident (max FFF0h)
  1200.     CS = segment of PSP
  1201. Return: never
  1202. Notes:    this is an obsolete call
  1203.     INT 22, INT 23, and INT 24 are restored from the PSP
  1204.     does not close any open files
  1205.     the minimum number of bytes which will remain resident is 110h for
  1206.       DOS 2.x and 60h for DOS 3.0+; there is no minimum for DOS 1.x, which
  1207.       implements this service in COMMAND.COM rather than the DOS kernel
  1208. SeeAlso: INT 21/AH=31h
  1209. --------G-27---------------------------------
  1210. INT 27 - COMTROL HOSTESS i/ISA DEBUGGER - INVOKE REMOTE TURBO DEBUGGER KERNEL
  1211.     ???
  1212. Return: ???
  1213. Desc:    invoke a copy of the remote Turbo Debugger kernel on the Hostess i
  1214.       controller
  1215. SeeAlso: INT 20"COMTROL",INT 26"COMTROL"
  1216. --------D-28---------------------------------
  1217. INT 28 C - DOS 2+ - DOS IDLE INTERRUPT
  1218.     SS:SP = top of MS-DOS stack for I/O functions
  1219. Return: all registers preserved
  1220. Desc:    This interrupt is invoked each time one of the DOS character input
  1221.       functions loops while waiting for input.  Since a DOS call is in
  1222.       progress even though DOS is actually idle during such input waits,
  1223.       hooking this function is necessary to allow a TSR to perform DOS
  1224.       calls while the foreground program is waiting for user input.     The
  1225.       INT 28h handler may invoke any INT 21h function except functions
  1226.       00h through 0Ch.
  1227. Notes:    under DOS 2.x, the critical error flag (the byte immediately after the
  1228.       InDOS flag) must be set in order to call DOS functions 50h/51h from
  1229.       the INT 28h handler without destroying the DOS stacks.
  1230.     calls to INT 21/AH=3Fh,40h from within an INT 28 handler may not use a
  1231.       handle which refers to CON
  1232.     at the time of the call, the InDOS flag (see INT 21/AH=34h) is normally
  1233.       set to 01h; if larger, DOS is truly busy and should not be reentered
  1234.     the default handler is an IRET instruction
  1235.     supported in OS/2 compatibility box
  1236.     the _MS-DOS_Programmer's_Reference_ for DOS 5.0 incorrectly documents
  1237.       this interrupt as superseded
  1238. SeeAlso: INT 21/AH=34h,INT 2A/AH=84h,INT 2F/AX=1680h
  1239. --------D-29---------------------------------
  1240. INT 29 C - DOS 2+ - FAST CONSOLE OUTPUT
  1241.     AL = character to display
  1242. Return: nothing
  1243. Notes:    automatically called when writing to a device with bit 4 of its device
  1244.       driver header set (see also INT 21/AH=52h)
  1245.     COMMAND.COM v3.2 and v3.3 compare the INT 29 vector against the INT 20
  1246.       vector and assume that ANSI.SYS is installed if the segment is larger
  1247.     the default handler under DOS 2.x and 3.x simply calls INT 10/AH=0Eh
  1248.     the default handler under DESQview 2.2 understands the <Esc>[2J
  1249.       screen-clearing sequence, calls INT 10/AH=0Eh for all others
  1250. SeeAlso: INT 21/AH=52h,INT 2F/AX=0802h,INT 79
  1251. --------N-2A00-------------------------------
  1252. INT 2A - NETWORK - INSTALLATION CHECK
  1253.     AH = 00h
  1254. Return: AH <> 00h if installed
  1255.     CF set if NetWare v2.15 NetBIOS emulator installed
  1256. Note:    supported by PC LAN Program, LAN Manager, LANtastic, NetWare, 10NET,
  1257.       etc.
  1258. SeeAlso: INT 5C
  1259. --------N-2A0000-----------------------------
  1260. INT 2A - AT&T Starlan Extended NetBIOS (var length names) - INSTALLATION CHECK
  1261.     AX = 0000h
  1262. Return: AH = DDh
  1263. SeeAlso: INT 5B
  1264. --------N-2A01-------------------------------
  1265. INT 2A - NETWORK (Microsoft,LANtastic) - EXECUTE NETBIOS REQUEST,NO ERROR RETRY
  1266.     AH = 01h
  1267.     ES:BX -> NCB (see #2381 at INT 5C)
  1268. Return: AL = NetBIOS error code
  1269.     AH = status
  1270.         00h no error
  1271.         01h error occurred
  1272. SeeAlso: AH=04h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  1273. --------N-2A02-------------------------------
  1274. INT 2A - NETWORK (Microsoft) - SET NET PRINTER MODE
  1275.     AH = 02h
  1276.     ???
  1277. Return: ???
  1278. --------N-2A0300-----------------------------
  1279. INT 2A - NETWORK - CHECK DIRECT I/O
  1280.     AX = 0300h
  1281.     DS:SI -> ASCIZ device name (may be full path or only drive specifier--
  1282.           must include the colon)
  1283. Return: CF clear if direct physical addressing (INT 13,INT 25) permissible
  1284.     CF set if access via files only
  1285. Notes:    do not use direct disk accesses if this function returns CF set or the
  1286.       device is redirected (INT 21/AX=5F02h)
  1287.     use AH=00h to determine whether the network is installed; if not,
  1288.       direct physical access is allowed
  1289.     may take some time to execute, so programs which need to check
  1290.       frequently should save the result of the first call
  1291.     this function is called by the DOS kernel on INT 25 and INT 26
  1292.     supported by PC LAN Program, LAN Manage, LANtastic, NetWare, 10NET,
  1293.       etc.
  1294. SeeAlso: INT 13,INT 25,INT 26,INT 21/AX=5F02h
  1295. --------N-2A04-------------------------------
  1296. INT 2A - NETWORK - EXECUTE NetBIOS REQUEST
  1297.     AH = 04h
  1298.     AL = error retry
  1299.         00h automatically retry request on errors 09h, 12h, and 21h
  1300.           (see #2380 at INT 5C"NetBIOS")
  1301.         01h no retry
  1302.         02h ???
  1303.     ES:BX -> Network Control Block (see #2381 at INT 5C"NetBIOS")
  1304. Return: AX = 0000h if successful
  1305.     AH = 01h on error
  1306.         AL = error code
  1307. Notes:    invokes either INT 5B or INT 5C as appropriate
  1308.     supported by PC LAN Program, LANtastic, LAN Manager, NetWare, 10NET,
  1309.       etc.
  1310.     NetWare 2.15 NetBIOS emulator returns CF clear if successful, CF set
  1311.       on error
  1312.     PC LAN Program defines any non-zero return value in AH as an error
  1313.       indicator for subfunction 00h, and any non-zero return value in AX
  1314.       as an error indicator for subfunction 01h
  1315. SeeAlso: AH=00h,AH=01h,AX=0500h,INT 5B,INT 5C"NetBIOS"
  1316. --------N-2A0500-----------------------------
  1317. INT 2A - NETWORK - GET NETWORK RESOURCE AVAILABILITY
  1318.     AX = 0500h
  1319. Return: AX reserved
  1320.     BX = number of network names available
  1321.     CX = number of network control blocks available
  1322.     DX = number of network sessions available
  1323. Notes:    supported by PC LAN Program, LAN Manager, LANtastic, NetWare, 10NET,
  1324.       etc.
  1325.     the application should call this function before using any network
  1326.       resources, and maintain its own count to avoid exceeding the
  1327.       network's resource limits
  1328. SeeAlso: AH=00h,AH=01h,AH=04h,INT 5C"NetBIOS"
  1329. --------N-2A06-------------------------------
  1330. INT 2A - NETBIOS, LANtastic - NETWORK PRINT-STREAM CONTROL
  1331.     AH = 06h
  1332.     AL = function
  1333.         01h set concatenation mode
  1334.         all printer output put in one job until return to DOS prompt
  1335.         02h set truncation mode (default)
  1336.         printer open/close or BIOS/DOS output switch starts new job
  1337.         03h flush printer output and start new print job
  1338. Return: CF set on error
  1339.         AX = error code
  1340.     CF clear if successful
  1341. Notes:    subfunction 03h is equivalent to Ctrl/Alt/keypad-*
  1342.     supported by PC LAN Program, LANtastic, NetWare, 10NET, etc.
  1343.     LANtastic v4.x no longer supports this call
  1344.     this function sets the printer mode for all redirected printers
  1345. SeeAlso: INT 21/AX=5D08h,INT 21/AX=5D09h,INT 2F/AX=1125h
  1346. --------N-2A07-------------------------------
  1347. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  1348.     AH = 07h
  1349.     ???
  1350. Return: ???
  1351. Program: PC Network is an early networking package which was renamed the
  1352.       IBM PC Local Area Network Program (PC LAN Program) as of v1.10
  1353. SeeAlso: AH=86h
  1354. --------N-2A2001-----------------------------
  1355. INT 2A - MS Networks or NETBIOS - ???
  1356.     AX = 2001h
  1357.     ???
  1358. Return: ???
  1359. Note:    intercepted by DESQview 2.x
  1360. --------N-2A2002-----------------------------
  1361. INT 2A - NETWORK - ???
  1362.     AX = 2002h
  1363.     ???
  1364. Return: ???
  1365. Note:    called by MS-DOS 3.30-6.00 APPEND
  1366. --------N-2A2003-----------------------------
  1367. INT 2A - NETWORK - ???
  1368.     AX = 2003h
  1369.     ???
  1370. Return: ???
  1371. Note:    called by MS-DOS 3.30-6.00 APPEND
  1372. --------N-2A7802-----------------------------
  1373. INT 2A - NETWORK - PC LAN PROG v1.31+ - GET LOGGED ON USER NAME
  1374.     AX = 7802h
  1375.     ES:DI -> 8-byte buffer to be filled
  1376. Return: AL = 00h if no user logged on to Extended Services
  1377.     AL <> 00h if user logged on to Extended Services
  1378.         buffer at ES:DI filled with name, padded to 8 chars with blanks.
  1379. --------D-2A80-------------------------------
  1380. INT 2A CU - NETWORK - BEGIN DOS CRITICAL SECTION
  1381.     AH = 80h
  1382.     AL = critical section number (00h-0Fh) (see #1806)
  1383. Notes:    normally hooked to avoid interrupting a critical section, rather than
  1384.       called
  1385.     the handler should ensure that none of the critical sections are
  1386.       reentered, usually by suspending a task which attempts to reenter
  1387.       an active critical section
  1388.     the DOS kernel does not invoke critical sections 01h and 02h unless it
  1389.       is patched.  DOS 3.1+ contains a zero-terminated list of words
  1390.       beginning at offset -11 from the Swappable Data Area
  1391.       (see #0967 at INT 21/AX=5D06h); each word contains the offset within
  1392.       the DOS data segment of a byte which must be changed from C3h (RET)
  1393.       to 50h (POP AX) under DOS 3.x or from 00h to a nonzero value under
  1394.       DOS 4.0+ to enable use of critical sections.    For DOS 4.0+, all
  1395.       words in this list point at the byte at offset 0D0Ch.
  1396.     MS Windows patches the DOS kernel's calls to INT 2A/AH=80h-81h into
  1397.       far calls to its own handler, and does not reflect the calls back
  1398.       to INT 2A unless SYSTEM.INI contains ReflectDOSInt2A=1 or
  1399.       ModifyDOSInt2A=0 in the [386Enh] section
  1400.     Novell NETX does not issue INT 2A/AH=80h and INT 2A/AH=81h calls when
  1401.       it intercepts INT 21 calls and processes them itself
  1402. SeeAlso: AH=81h,AH=82h,AX=8700h,INT 21/AX=5D06h,INT 21/AX=5D0Bh
  1403.  
  1404. (Table 1806)
  1405. Values for DOS critical section number:
  1406.  01h    DOS kernel, SHARE.EXE, DOSMGR
  1407.     apparently for maintaining the integrity of DOS/SHARE/NET
  1408.       data structures
  1409.  02h    DOS kernel, DOSMGR
  1410.     ensures that no multitasking occurs while DOS is calling an
  1411.       installable device driver
  1412.  05h    network redirector
  1413.  06h    DOS 4.x only IFSFUNC
  1414.  08h    ASSIGN.COM
  1415.  0Ah    MSCDEX, CORELCDX
  1416.  0Fh    IBM PC LAN server (while intercepting INT 10/AH=06h,07h,0Eh)
  1417. --------D-2A81-------------------------------
  1418. INT 2A CU - NETWORK - END DOS CRITICAL SECTION
  1419.     AH = 81h
  1420.     AL = critical section number (00h-0Fh) (see #1806)
  1421. Notes:    normally hooked rather than called
  1422.     the handler should reawaken any tasks which were suspended due to an
  1423.       attempt to enter the specified critical section
  1424.     MS Windows patches the DOS kernel's calls to INT 2A/AH=80h-81h into
  1425.       far calls to its own handler, and does not reflect the calls back
  1426.       to INT 2A unless SYSTEM.INI contains ReflectDOSInt2A=1 or
  1427.       ModifyDOSInt2A=0 in the [386Enh] section
  1428. SeeAlso: AH=80h,AH=82h,AX=8700h
  1429. --------D-2A82-------------------------------
  1430. INT 2A CU - NETWORK - END DOS CRITICAL SECTIONS 0 THROUGH 7
  1431.     AH = 82h
  1432. Notes:    called by the INT 21h function dispatcher for function 0 and functions
  1433.       greater than 0Ch except 59h, and on process termination
  1434.     the handler should reawaken any tasks which were suspended due to an
  1435.       attempt to enter one of the critical sections 0 through 7
  1436. SeeAlso: AH=81h
  1437. --------N-2A84-------------------------------
  1438. INT 2A CU - NETWORK - KEYBOARD BUSY LOOP
  1439.     AH = 84h
  1440. Note:    similar to DOS's INT 28h, called from inside the DOS keyboard input
  1441.       loop (i.e. INT 21/AH=07h or INT 21/AH=08h) to allow the network
  1442.       software to process requests
  1443. SeeAlso: INT 28
  1444. --------N-2A86-------------------------------
  1445. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  1446.     AH = 86h
  1447.     ???
  1448. Return: ???
  1449. SeeAlso: AH=07h,AH=C4h
  1450. --------P-2A8700-----------------------------
  1451. INT 2A CU - PRINT - BEGIN BACKGROUND PRINTING
  1452.     AX = 8700h
  1453.     CF clear
  1454. Return: CF clear if OK to print in background now
  1455.     CF set if background printing not allowed at this time
  1456. Desc:    used to inform interested programs that PRINT is about to start its
  1457.       background processing, and allow those programs to postpone the
  1458.       processing if necessary
  1459. Notes:    when PRINT gains control and wants to begin printing, it calls this
  1460.       function.  If CF is clear on return, PRINT begins its background
  1461.       processing, and calls AX=8701h when it is done.  If CF is set on
  1462.       return, PRINT will relinquish control immediately, and will not
  1463.       call AX=8701h
  1464.     PCVENUS (an early network shell by IBM and CMU) hooks this call to
  1465.       prevent background printing while its own code is active
  1466. SeeAlso: AH=80h,AH=81h,AX=8701h
  1467. --------P-2A8701-----------------------------
  1468. INT 2A CU - PRINT - END BACKGROUND PRINTING
  1469.     AX = 8701h
  1470. Desc:    used to inform interested programs that PRINT has completed its
  1471.       background processing
  1472. Note:    called by PRINT after it has performed some background printing; not
  1473.       called if AX=8700h returned with CF set.
  1474. SeeAlso: AX=8700h
  1475. --------N-2A89-------------------------------
  1476. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  1477.     AH = 89h
  1478.     AL = ???  (ASSIGN uses 08h)
  1479.     ???
  1480. Return: ???
  1481. --------I-2A90-------------------------------
  1482. INT 2A U - IBM PC 3270 EMULATION PROGRAM - ???
  1483.     AH = 90h
  1484.     ???
  1485. Return: ???
  1486. Note:    the LANtastic redirector and SERVER.EXE use this function with AL=01h,
  1487.       03h-07h,0Ch-11h
  1488. --------N-2AC2-------------------------------
  1489. INT 2A U - Network - ???
  1490.     AH = C2h
  1491.     AL = subfunction
  1492.         07h ???
  1493.         08h ???
  1494.     BX = 0001h
  1495.     ???
  1496. Return: ???
  1497. Note:    this function is called by the DOS 3.30-6.00 APPEND
  1498. --------N-2AC4-------------------------------
  1499. INT 2A U - PC Network v1.00 - RECEIVER.COM - ???
  1500.     AH = C4h
  1501.     AL = subfunction
  1502.         07h ???
  1503.         08h ???
  1504.     BX = ???
  1505.     ???
  1506. Return: ???
  1507. SeeAlso: AH=86h
  1508. --------N-2AD800-----------------------------
  1509. INT 2A U - Novell NetWare Lite - SERVER - SET ???
  1510.     AX = D800h
  1511. Return: nothing
  1512. Desc:    sets ??? flag, and sets ??? to initial value
  1513. Note:    called by CLIENT
  1514. SeeAlso: AX=D801h,AX=D850h
  1515. --------N-2AD801-----------------------------
  1516. INT 2A U - Novell NetWare Lite - SERVER - RESET ???
  1517.     AX = D801h
  1518. Return: nothing
  1519. Desc:    clears the ??? flag set by AX=D800h
  1520. Note:    called by CLIENT
  1521. SeeAlso: AX=D800h,AX=D850h
  1522. --------N-2AD850-----------------------------
  1523. INT 2A U - Novell NetWare Lite - CLIENT - INCREMENT ???
  1524.     AX = D850h
  1525. Return: nothing
  1526. Desc:    increments an internal byte-sized counter
  1527. Note:    this function is intercepted by DV/X 1.10 PEERSERV.DVR and the
  1528.       Advanced NetWare 4.0 DOS Requester
  1529. SeeAlso: AX=D851h
  1530. --------N-2AD851-----------------------------
  1531. INT 2A U - Novell NetWare Lite - CLIENT - RESET ???
  1532.     AX = D851h
  1533. Return: nothing
  1534. Desc:    resets an internal byte-sized counter to zero
  1535. Note:    this function is intercepted by DV/X 1.10 PEERSERV.DVR and the
  1536.       Advanced NetWare 4.0 DOS Requester
  1537. SeeAlso: AX=D850h
  1538. --------N-2AD852-----------------------------
  1539. INT 2A U - Novell NetWare - DOS Requester v1.03 - ???
  1540.     AX = D852h
  1541. Return: ???
  1542. Note:    calls the NetWare Lite SERVER installation check, and sets ??? pointer
  1543. SeeAlso: AX=D853h,INT 2F/AX=D880h
  1544. --------N-2AD853-----------------------------
  1545. INT 2A U - Novell NetWare - DOS Requester v1.03 - ???
  1546.     AX = D853h
  1547. Return: ???
  1548. Note:    clears the pointer set by AX=D852h
  1549. SeeAlso: AX=D852h
  1550. --------N-2AE0-------------------------------
  1551. INT 2A U - PC Network 1.00 - ???
  1552.     AH = E0h
  1553.     AL = subfunction??? (01h,02h, maybe others)
  1554.     ???
  1555. Return: ???
  1556. Note:    called by PCNet 1.00 NET.COM, a shell program from which others are run
  1557. --------N-2AFF90-----------------------------
  1558. INT 2A - PC/TCP PREDIR.EXE - ???
  1559.     AX = FF90h
  1560. Return: AX = ???
  1561. Note:    PREDIR.EXE is the network printer redirector included as part of the
  1562.       PC/TCP system by FTP Software, Inc.
  1563. --------N-2AFF91-----------------------------
  1564. INT 2A - PC/TCP PREDIR.EXE - ???
  1565.     AX = FF91h
  1566.     BX = ???
  1567. Return: AX = status???
  1568. --------N-2AFF92-----------------------------
  1569. INT 2A - PC/TCP PREDIR.EXE - INSTALLATION CHECK
  1570.     AX = FF92h
  1571. Return: AX = 0000h if installed
  1572.        BX = redirected printer port (FFFFh if no printers redirected)
  1573.        CX = version (CH = major, CL = minor)
  1574. Note:    PREDIR.EXE is the network printer redirector included as part of the
  1575.       PC/TCP system by FTP Software, Inc.
  1576. --------N-2AFF93-----------------------------
  1577. INT 2A - PC/TCP PREDIR.EXE - ???
  1578.     AX = FF93h
  1579. Return: AX = ???
  1580. --------N-2AFF94-----------------------------
  1581. INT 2A - PC/TCP PREDIR.EXE - ???
  1582.     AX = FF94h
  1583.     BX = ???
  1584.     CX = ???
  1585.     DX = ???
  1586. Return: AX = ???
  1587. Note:    PREDIR.EXE is the network printer redirector included as part of the
  1588.       PC/TCP system by FTP Software, Inc.
  1589. --------N-2AFF95-----------------------------
  1590. INT 2A - PC/TCP PREDIR.EXE - GET CONFIGURATION STRINGS
  1591.     AX = FF95h
  1592.     CX = what to get
  1593.         0000h ??? (returned pointer to "C:\COMMAND.COM")
  1594.         0001h spooling program
  1595.         0002h ???
  1596.         0003h spool file name
  1597.         0004h swap file name
  1598. Return: AX = status
  1599.         0000h successful
  1600.     BX:DX -> ASCIZ configuration string
  1601. --------N-2AFF96-----------------------------
  1602. INT 2A - PC/TCP PREDIR.EXE - SET PRINT JOB TERMINATION CONFIGURATION
  1603.     AX = FF96h
  1604.     CX = what to set
  1605.         0000h ???
  1606.         0001h print-on-hotkey state
  1607.         0002h print-on-exit state
  1608.         0003h print job timeout in clock ticks
  1609.         0004h print-on-EOF state
  1610.     BX = new value (0000h disabled, 0001h enabled except for timeout)
  1611. Return: AX = ???
  1612. SeeAlso: AX=FF97h
  1613. Note:    PREDIR.EXE is the network printer redirector included as part of the
  1614.       PC/TCP system by FTP Software, Inc.
  1615. --------N-2AFF97-----------------------------
  1616. INT 2A - PC/TCP PREDIR.EXE - GET PRINT JOB TERMINATION CONFIGURATION
  1617.     AX = FF97h
  1618.     CX = what to get
  1619.         0000h ???
  1620.         0001h print-on-hotkey state
  1621.         0002h print-on-exit state
  1622.         0003h print job timeout in clock ticks
  1623.         0004h print-on-EOF state
  1624. Return: AX = status
  1625.         0000h successful
  1626.     BX = old value (0000h disabled, 0001 enabled except for timeout)
  1627. SeeAlso: AX=FF96h
  1628. --------D-2B---------------------------------
  1629. INT 2B - DOS 2+ - RESERVED
  1630. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  1631. --------D-2C---------------------------------
  1632. INT 2C - DOS 2+ - RESERVED
  1633. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  1634. --------O-2C---------------------------------
  1635. INT 2C - STARLITE architecture - KERNEL API
  1636. Note:    STARLITE is an architecture by General Software for a series of MS-DOS
  1637.       compatible operating systems (OEM DOS, NETWORK DOS, and SMP DOS) to
  1638.       be released in 1991.    The interrupt number is subject to change
  1639.       before the actual release.
  1640. --------m-2C---------------------------------
  1641. INT 2C R - Cloaking - CALL PROTECTED-MODE PASSALONG CHAIN
  1642. Notes:    when this interrupt is invoked in V86 mode, RM386 will invoke the first
  1643.       in a chain of protected-mode handlers, and will only pass execution
  1644.       to the V86-mode INT 2C handler if none of the handlers in the
  1645.       passalong chain handle the call instead.  This is the method by which
  1646.       the real-mode stub of a cloaked application communicates with the
  1647.       protected-mode portion.
  1648.     the cloaking host calls the passalong chain with EAX=58494E33h ('WIN3')
  1649.       when MS Windows starts up and with EAX=334E4958h ('3NIW') when
  1650.       Windows shuts down; between these two broadcasts, the additional
  1651.       Windows-only Cloaking services are available
  1652.     this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  1653.       memory manager included in Helix Software's Netroom
  1654. SeeAlso: INT 2C/AX=0009h,INT 2F/AX=4310h"Cloaking"
  1655. --------m-2C0000-----------------------------
  1656. INT 2C P - Cloaking - ALLOCATE GDT SELECTOR
  1657.     AX = 0000h
  1658.     EBX = base address
  1659.     CL = access mode byte
  1660.     CH = extended access mode byte (omit limit field)
  1661.     EDX = segment limit
  1662. Return: CF clear if successful
  1663.         AX = selector
  1664.     CF set on error
  1665.         AX = error code (see #1807)
  1666. Notes:    this INT 2C interface is used by Netroom's DPMI.EXE v3.00
  1667.     to access extended memory, set the base address to the desired
  1668.       physical address plus 400000h (4M)
  1669.     this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  1670.       memory manager included in Helix Software's Netroom
  1671. SeeAlso: AX=0001h,AX=0002h,AX=0003h,AX=0004h,AX=0005h,INT 31/AH=57h,#0395
  1672.  
  1673. (Table 1807)
  1674. Values for Cloaking error code:
  1675.  0001h    no more selectors
  1676.  0002h    not a GDT ring 0 selector
  1677.  0003h    invalid selector (out of range, not user selector)
  1678.  0004h    selector not allocated
  1679. --------m-2C0001-----------------------------
  1680. INT 2C P - Cloaking - FREE GDT SELECTOR
  1681.     AX = 0001h
  1682.     SI = selector
  1683. Return: CF clear if successful
  1684.     CF set on error
  1685.         AX = error code (see #1807)
  1686. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1687. SeeAlso: AX=0000h,INT 2F/AX=4310h"Cloaking"
  1688. --------m-2C0002-----------------------------
  1689. INT 2C P - Cloaking - SET SEGMENT BASE ADDRESS
  1690.     AX = 0002h
  1691.     SI = selector
  1692.     EBX = new physical base addres
  1693. Return: CF clear if successful
  1694.     CF set on error
  1695.         AX = error code (see #1807)
  1696. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1697. SeeAlso: AX=0000h,AX=0003h,AX=0004h,INT 31/AX=0007h,#0395
  1698. --------m-2C0003-----------------------------
  1699. INT 2C P - Cloaking - SET SEGMENT LIMIT
  1700.     AX = 0003h
  1701.     SI = selector
  1702.     EBX = new limit
  1703. Return: CF clear if successful
  1704.     CF set on error
  1705.         AX = error code (see #1807)
  1706. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1707. SeeAlso: AX=0000h,AX=0002h,AX=0004h,INT 31/AX=0008h
  1708. --------m-2C0004-----------------------------
  1709. INT 2C P - Cloaking - SET SEGMENT ACCESS MODE
  1710.     AX = 0004h
  1711.     SI = selector
  1712.     CL = new access mode byte (see #0396)
  1713. Return: CF clear if successful
  1714.     CF set on error
  1715.         AX = error code (see #1807)
  1716. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1717. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0005h,INT 31/AX=0009h
  1718. --------m-2C0005-----------------------------
  1719. INT 2C P - Cloaking - SET SEGMENT EXTENDED ACCESS MODE
  1720.     AX = 0005h
  1721.     SI = selector
  1722.     CL = new extended access mode byte (limit field ignored) (see #1808)
  1723. Return: CF clear if successful
  1724.     CF set on error
  1725.         AX = error code (see #1807)
  1726. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1727. SeeAlso: AX=0000h,AX=0002h,AX=0003h,AX=0004h,INT 31/AX=0009h
  1728.  
  1729. Bitfields for extended access mode byte:
  1730. Bit(s)    Description    (Table 1808)
  1731.  7    4K granularity instead of byte granularity
  1732.  6    32-bit code segment
  1733.  5    reserved (0)
  1734.  4    segment available to system
  1735. SeeAlso: #0397
  1736. --------m-2C0006-----------------------------
  1737. INT 2C P - Cloaking - GET PROTECTED-MODE INTERRUPT VECTOR
  1738.     AX = 0006h
  1739.     CL = vector (00h-7Fh)
  1740. Return: CF clear
  1741.     DX:EBX -> current interrupt handler
  1742. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1743. SeeAlso: AX=0007h,INT 31/AX=0204h
  1744. --------m-2C0007-----------------------------
  1745. INT 2C P - Cloaking - SET PROTECTED-MODE INTERRUPT VECTOR
  1746.     AX = 0007h
  1747.     CL = vector (00h-7Fh)
  1748.     DX:EBX -> interrupt handler
  1749. Return: CF clear
  1750. Notes:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1751.     the IDT entry's type remains unchanged
  1752. SeeAlso: AX=0006h,INT 31/AX=0205h
  1753. --------m-2C0008-----------------------------
  1754. INT 2C P - Cloaking - GET PASSALONG ADDRESS
  1755.     AX = 0008h
  1756. Return: CF clear
  1757.     DX:EBX = current passalong address
  1758. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1759. SeeAlso: AX=0009h,AX=002Ch,INT 2F/AX=4310h"Cloaking"
  1760. --------m-2C0009-----------------------------
  1761. INT 2C P - Cloaking - SET PASSALONG ADDRESS
  1762.     AX = 0009h
  1763.     DX:EBX = new value for passalong address (see #1809)
  1764. Return: CF clear
  1765. Notes:    when an INT 2C instruction is executed in V86 mode, the Cloaking host
  1766.       calls the passalong address.    The handler should check whether the
  1767.       upcall is of interest to it, and if not it should jump to the old
  1768.       passalong address (retrieved with AX=0008h before the handler was
  1769.       installed).  The final handler should return with CF clear to cause
  1770.       the interrupt to be reflected back to V86 mode if none of the
  1771.       passalong handlers is triggered
  1772.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1773. SeeAlso: AX=0008h,AX=002Dh,INT 2C"CLOAKING"
  1774.  
  1775. (Table 1809)
  1776. Values Cloaking passalong address is called with:
  1777.     EAX = CS:IP of byte following INT 2C instruction invoking passalong
  1778.     SS:EBX -> caller registers (see #1810)
  1779.     CF clear
  1780.     others undefined
  1781. Return: CF clear: pass along to V86-mode INT 2C handler
  1782.     CF set: return immediately to V86 mode
  1783.  
  1784. Format of Cloaking caller registers:
  1785. Offset    Size    Description    (Table 1810)
  1786.  00h    DWORD    EDI
  1787.  04h    DWORD    ESI
  1788.  08h    DWORD    EBP
  1789.  0Ch    DWORD    reserved (ESP from PUSHAD instruction)
  1790.  10h    DWORD    EBX
  1791.  14h    DWORD    EDX
  1792.  18h    DWORD    ECX
  1793.  1Ch    DWORD    EAX
  1794.  20h    DWORD    error code
  1795.  24h    DWORD    EIP
  1796.  28h    WORD    CS
  1797.  2Ah    WORD    padding
  1798.  2Ch    DWORD    EFLAGS
  1799.  30h    DWORD    ESP
  1800.  34h    WORD    SS
  1801.  36h    WORD    padding
  1802. --remainder not available if protected-mode ring3 trap---
  1803.  38h    WORD    ES
  1804.  3Ah    WORD    padding
  1805.  3Ch    WORD    DS
  1806.  3Eh    WORD    padding
  1807.  40h    WORD    FS
  1808.  42h    WORD    padding
  1809.  44h    WORD    GS
  1810.  46h    WORD    padding
  1811. --------m-2C000A-----------------------------
  1812. INT 2C P - Cloaking - GET BASE ADDRESS OF GDT SELECTOR
  1813.     AX = 000Ah
  1814.     SI = selector
  1815. Return: CF clear if successful
  1816.         EBX = segment base address
  1817.     CF set on error
  1818.         AX = error code (see #1807)
  1819. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  1820.       memory manager included in Helix Software's Netroom
  1821. SeeAlso: AX=0000h,AX=0002h,AX=000Bh
  1822. --------m-2C000B-----------------------------
  1823. INT 2C P - Cloaking - GET SELECTOR LIMIT
  1824.     AX = 000Bh
  1825.     SI = selector
  1826. Return: CF clear if successful
  1827.         EBX = segment base address
  1828.     CF set on error
  1829.         AX = error code (see #1807)
  1830. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  1831. SeeAlso: AX=000Ah,INT 2F/AX=4310h"Cloaking"
  1832. --------m-2C---------------------------------
  1833. INT 2C P - RM386 v6.00 - CLOAKING - RESERVED FOR CLOAKED BIOS USE UNDER WINDOWS
  1834.     AX = function (000Ch-001Fh)
  1835. --------m-2C000F-----------------------------
  1836. INT 2C P - Cloaking v1.01 - "Simulate_Shell_Event"
  1837.     AX = 000Fh
  1838.     ECX = event code (see #1811)
  1839.     DX = subfunction for event
  1840.     EDX high word = boost value (see #1812)
  1841.     SI:EDI -> completion procedure
  1842. Return: CF clear if successful (event scheduled)
  1843.     CF set on error
  1844. Note:    this function is only available while MS Windows is running
  1845. SeeAlso: AX=0011h,AX=0012h,INT 2F/AX=1605h,INT 2F/AX=4310h"Cloaking"
  1846.  
  1847. (Table 1811)
  1848. Values for Cloaking shell event code:
  1849.  0414h    Hot key event
  1850.     subevent 0000h: Alt-Space
  1851.     subevent 0001h: Alt-Enter
  1852.     subevent 0002h: Dir-VM
  1853.  0415h    Switch context
  1854.     subevent 0000h for DOS VM context, nonzero for System VM context
  1855.  0416h    Clipboard event
  1856.  0417h    Termination event
  1857.     subevent 0000h for normal termination, nonzero for error
  1858.  0418h    Display message
  1859.     subevent 0000h for normal message, nonzero for system model ASAP
  1860.  0419h    Crash
  1861.  041Ah    Paste complete
  1862.     subevent 0000h: normal
  1863.     subevent 0001h: cancelled by user
  1864.     subevent 0002h: cancelled
  1865.  041Bh    Contention event
  1866.  041Ch    Screen switch
  1867.     subevent 0000h: forward
  1868.     subevent 0001h: back
  1869.  041Dh    Filesystem change
  1870.  041Eh    Check Focus
  1871.  041Fh    Panic
  1872.  
  1873. Bitfields for boost value:
  1874. Bit(s)    Description    (Table 1812)
  1875.  0    boost system VM until focus changes
  1876.  1    boost system VM on Switcher screen
  1877.  2    boost system VM until response
  1878.  3    boost system VM during clipboard activity
  1879.  4    boost system VM during print screen
  1880.  5    boost system VM during update
  1881. --------m-2C0011-----------------------------
  1882. INT 2C P - Cloaking v1.01 - "Switch_VMs_and_Call_back"
  1883.     AX = 0011h
  1884.     EBX = handle of VM to be made active
  1885.     SI:EDI -> 32-bit FAR completion procedure
  1886. Return: CF clear if successful (scheduled)
  1887.     CF set on error
  1888. Notes:    this function is only available while MS Windows is running
  1889.     the completion procedure is called with CF clear if the specified
  1890.       VM has been made active, or with CF set on error
  1891. SeeAlso: AX=000Fh,AX=0012h
  1892. --------m-2C0012-----------------------------
  1893. INT 2C P - Cloaking v1.01 - "Query_Current_VM"
  1894.     AX = 0012h
  1895. Return: CF clear
  1896.     EBX = handle of active VM
  1897.     ESI = handle of system VM
  1898.     ECX = VM status flags (see #1813)
  1899.     EDX = shell flags (see #1814)
  1900. Note:    this function is only available while MS Windows is running in enhanced
  1901.       mode
  1902. SeeAlso: AX=000Fh,AX=0011h,AX=0013h
  1903.  
  1904. Bitfields for VM status flags:
  1905. Bit(s)    Description    (Table 1813)
  1906.  0    in exclusive mode
  1907.  1    runs in background
  1908.  2    being created
  1909.  3    suspended
  1910.  4    not executable
  1911.  5    executing in protected mode
  1912.  6    contains PM application
  1913.  7    32-bit PM application
  1914.  8    called from VxD
  1915.  9    high priority background
  1916.  10    blocked on semaphore
  1917.  11    awakening
  1918.  12    has pageable V86
  1919.  13    has locked V86
  1920.  14    is scheduled
  1921.  15    idle
  1922.  16    closing
  1923.  
  1924. Bitfields for shell flags:
  1925. Bit(s)    Description    (Table 1814)
  1926.  2    windowed
  1927.  5    Alt-Tab reserved
  1928.  6    Alt-Esc reserved
  1929.  7    Alt-Space reserved
  1930.  8    Alt-PrtSc reserved
  1931.  9    Alt-Enter reserved
  1932.  10    Alt-PrtSc reserved
  1933.  11    PrtSc reserved
  1934.  12    polling enabled
  1935.  13    no HMA
  1936.  14    has shortcut key
  1937.  15    locked EMS handles
  1938.  16    locked XMS handles
  1939.  17    fast paste enabled
  1940.  18    locked V86 memory
  1941.  30    close-on-exit enabled
  1942. --------m-2C0013-----------------------------
  1943. INT 2C P - Cloaking v1.01 - "Issue_System_Modal_Message"
  1944.     AX = 0013h
  1945.     EDX = message box flags (see #1815)
  1946.     DS:ECX -> ASCIZ message text
  1947.     DS:EDI -> ASCIZ caption
  1948. Return: CF clear
  1949.     EAX = response code
  1950. Note:    this function is only available while MS Windows is running in enhanced
  1951.       mode
  1952. SeeAlso: AX=000Fh,AX=0012h
  1953.  
  1954. Bitfields for message box flags:
  1955. Bit(s)    Description    (Table 1815)
  1956.  3-0    response codes (see #1816)
  1957.  7-4    icon codes
  1958.     1 = Warning hand
  1959.     2 = exclamation mark
  1960.     4 = asterisk
  1961.  9-8    default response (0 = first button, 1 = second, 2 = third)
  1962.  12    message is system model
  1963.  15    don't change focus
  1964.  29    hang with interrupts enabled
  1965.  30    do not window
  1966.  31    execute ASAP
  1967.  
  1968. (Table 1816)
  1969. Values for response codes:
  1970.  00h    OK
  1971.  01h    OK, Cancel
  1972.  02h    Abort, Retry, Ignore
  1973.  03h    Yes, No, Cancel
  1974.  04h    Yes, No
  1975.  05h    Retry, Cancel
  1976. --------m-2C001D-----------------------------
  1977. INT 2C P - Cloaking v1.01 - GET INT 2C API HANDLER ENTRY POINT
  1978.     AX = 001Dh
  1979. Return: CF clear
  1980.     DX:EBX = selector:offset of Cloaking host INT 2C handler
  1981. Desc:    get the Cloaking host's entry point to bypass any other programs
  1982.       which may have hooked INT 2C in protected mode
  1983. Note:    the returned entry point must be called with a simulated INT, i.e.
  1984.       a PUSHD must precede the far call to the handler
  1985. SeeAlso: INT 2F/AX=4310h"Cloaking"
  1986. --------m-2C001E-----------------------------
  1987. INT 2C P - Cloaking v1.01 - CLEAR CRITICAL SECTION
  1988.     AX = 001Eh
  1989. Return: CF clear
  1990. Desc:    allow MS Windows to switch to another VM after having prevented it
  1991.       by invoking a critical section
  1992. SeeAlso: AX=001Fh,INT 15/AX=101Ch,INT 2F/AX=1682h
  1993. --------m-2C001F-----------------------------
  1994. INT 2C P - Cloaking v1.01 - SET CRITICAL SECTION
  1995.     AX = 001Fh
  1996. Return: CF clear
  1997. Desc:    prevent MS Windows from switching to another VM
  1998. SeeAlso: AX=001Eh,INT 15/AX=101Bh,INT 2F/AX=1681h
  1999. --------m-2C0020-----------------------------
  2000. INT 2C P - Cloaking - GET SIZE OF PROTECTED-MODE STATE
  2001.     AX = 0020h
  2002. Return: EAX = number of bytes required for storing state
  2003. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2004. SeeAlso: AX=0021h,AX=0022h
  2005. --------m-2C0021-----------------------------
  2006. INT 2C P - Cloaking - SAVE PROTECTED-MODE STATE
  2007.     AX = 0021h
  2008.     ES:EDI -> buffer for protected-mode state
  2009. Return: CF clear
  2010.     buffer filled
  2011. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2012. SeeAlso: AX=0020h,AX=0022h
  2013. --------m-2C0022-----------------------------
  2014. INT 2C P - Cloaking - RESTORE PROTECTED-MODE STATE
  2015.     AX = 0022h
  2016.     DS:ESI -> buffer containing previously-saved protected-mode state
  2017. Return: CF clear if successful
  2018.         state restored
  2019.     CF set on error (invalid buffer contents)
  2020. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2021. SeeAlso: AX=0020h,AX=0021h
  2022. --------m-2C0023-----------------------------
  2023. INT 2C P - Cloaking - ISSUE PROTECTED-MODE XMS CALL
  2024.     AX = 0023h
  2025. Notes:    not currently implemented--NOP in RM386 v6.00
  2026.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2027. --------m-2C0024-----------------------------
  2028. INT 2C P - Cloaking - SET V86-MODE STACK
  2029.     AX = 0024h
  2030.     DX:EBX = new value for V86-mode SS:ESP
  2031. Return: nothing
  2032. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2033. --------m-2C0025-----------------------------
  2034. INT 2C P - Cloaking - CALL V86-MODE PROCEDURE
  2035.     AX = 0025h
  2036.     DS:EBX -> client register structure (see #1810)
  2037. Return: CF clear if successful
  2038.         client register structure updated
  2039.     CF set if no more nested procedure call space available
  2040. Notes:    this call uses the V86-mode stack supplied in the client structure, and
  2041.       calls the routine specified by CS:IP in the client structure
  2042.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2043. SeeAlso: AX=0026h,AX=0027h,INT 31/AX=0301h
  2044. --------m-2C0026-----------------------------
  2045. INT 2C P - Cloaking - CALL V86-MODE INTERRUPT HANDLER
  2046.     AX = 0026h
  2047.     DS:EBX -> client register structure (see #1810)
  2048.     CX = interrupt number
  2049. Return: CF clear if successful
  2050.         client register structure updated
  2051.     CF set if no more nested procedure call space available
  2052. Notes:    this call uses the V86-mode stack supplied in the client structure
  2053.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2054. SeeAlso: AX=0025h,AX=0027h,INT 31/AX=0300h
  2055. --------m-2C0027-----------------------------
  2056. INT 2C P - Cloaking - CHAIN TO V86-MODE INTERRUPT HANDLER
  2057.     AX = 0027h
  2058.     DS:EBX -> client register structure (see #1810)
  2059. Return: CF clear if successful
  2060.         client register structure updated
  2061.     CF set if no more nested procedure call space available
  2062. Notes:    this call uses the V86-mode stack supplied in the client structure,
  2063.       and jumps to the address specified by CS:IP in the client structure
  2064.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2065. SeeAlso: AX=0025h,AX=0026h
  2066. --------m-2C0028-----------------------------
  2067. INT 2C P - Cloaking - GET ESP0 FROM TSS
  2068.     AX = 0028h
  2069. Return: CF clear
  2070.     EAX = TSS's ESP0
  2071. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00, the
  2072.       memory manager included in Helix Software's Netroom
  2073. --------m-2C0029-----------------------------
  2074. INT 2C P - Cloaking - SET SECONDARY STACK
  2075.     AX = 0029h
  2076.     DX:EBX = new value for SS:ESP of ring 3 secondary stack
  2077. Return: CF clear
  2078. Desc:    inform RM386 of the ring 3 interrupt stack location
  2079. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2080. --------m-2C002A-----------------------------
  2081. INT 2C P - Cloaking - SET 8259 IRQ BASE VECTORS
  2082.     AX = 002Ah
  2083.     BL = base vector of master interrupt controller
  2084.     CL = base vector of slave interrupt controller
  2085. Notes:    this call merely informs RM386 that the caller has changed the
  2086.       interrupt mappings
  2087.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2088. SeeAlso: INT 67/AX=DE0Bh
  2089. --------m-2C002BCH81-------------------------
  2090. INT 2C P - Cloaking - PROTECTED-MODE VIRTUAL DMA SERVICES
  2091.     AX = 002Bh
  2092.     CH = 81h
  2093.     CL = subfunction (02h-0Ch)
  2094.     other registers as appropriate for subfunction
  2095. Return: varies by function
  2096.     CF set on error
  2097. Notes:    these functions are equivalent to the INT 4B/AX=81xxh subfunctions
  2098.       with the same numbers
  2099.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2100. SeeAlso: INT 4B/AX=8102h,INT 4B/AX=810Ch
  2101. --------m-2C002C-----------------------------
  2102. INT 2C P - Cloaking - GET PORT-TRAPPING PASSALONG
  2103.     AX = 002Ch
  2104. Return: CF clear
  2105.     DX:EBX = current I/O trapping passalong address
  2106. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2107. SeeAlso: AX=0008h,AX=002Dh
  2108. --------m-2C002D-----------------------------
  2109. INT 2C P - Cloaking - SET PORT-TRAPPING PASSALONG
  2110.     AX = 002Dh
  2111.     DX:EBX = new I/O trapping passalong address (see #1817)
  2112. Return: CF clear
  2113. Notes:    RM386 calls the passalong address whenever an access to a monitored
  2114.       I/O port is attempted; the handler should check whether it is a port
  2115.       that it is interested in, and if not call the previous passalong
  2116.       address (which was retrieved with AX=002Ch before installing the
  2117.       new handler)
  2118.     this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2119. SeeAlso: AX=0009h,AX=002Ch,INT 67/AX=5DEAh
  2120.  
  2121. (Table 1817)
  2122. Values Cloaking port-trapping passalong address is called with:
  2123.     EAX = CS:IP of faulting instruction (unless executing in protected-mode
  2124.         ring 3)
  2125.     SS:EBX -> caller register structure (see #1810)
  2126.         check EFLAGS V86-mode bit for type
  2127.     CX = first two bytes of I/O instruction which was trapped
  2128.     DX = port to which I/O is being performed
  2129.     CF clear
  2130. Return: CF clear if RM386 should perform I/O operation
  2131.     CF set if I/O should be skipped
  2132. Note:    RM386 skips the trapped I/O instruction, so the passalong handler
  2133.       should not modify the client CS:EIP
  2134. --------m-2C002E-----------------------------
  2135. INT 2C P - Cloaking - TRAP I/O PORT
  2136.     AX = 002Eh
  2137.     DX = port number to trap
  2138. Return: CF clear if successful
  2139.     CF set on error (port out of range or reserved)
  2140. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2141. SeeAlso: AX=002Fh,AX=0030h
  2142. --------m-2C002F-----------------------------
  2143. INT 2C PU - Cloaking - UNTRAP I/O PORT
  2144.     AX = 002Fh
  2145.     DX = port number for which to cancel trapping
  2146. Return: CF clear if successful
  2147.     CF set on error (port out of range or reserved)
  2148. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2149. SeeAlso: AX=002Eh,AX=0030h
  2150. --------m-2C0030-----------------------------
  2151. INT 2C PU - Cloaking - GET TRAPPING STATE OF SPECIFIED PORT
  2152.     AX = 0030h
  2153.     DX = port number
  2154. Return: CF clear if successful
  2155.        BX = current state (0000h not trapped, 0001h trapped)
  2156.     CF set on error (port out of range or reserved)
  2157. Note:    this function was first introduced with RM386 (RAM-MAN/386) v6.00
  2158. SeeAlso: AX=002Eh,AX=002Fh
  2159. --------m-2C0031-----------------------------
  2160. INT 2C PU - RM386 v6.00 - BUG
  2161.     AX = 0031h
  2162. Program: RM386 (RAM-MAN/386) is the memory manager included in Helix Software's
  2163.       Netroom
  2164. Note:    due to a fencepost error, RM386 v6.00 will branch unpredictably if
  2165.       invoked with this function
  2166. --------m-2C0031-----------------------------
  2167. INT 2C P - Cloaking v1.01 - ALLOCATE V86 CALLBACK
  2168.     AX = 0031h
  2169.     DX:EBX = CS:EIP of protected-mode routine to be invoked by callback
  2170. Return: CF clear if successful
  2171.         EBX = CS:IP of V86-mode callback handler
  2172.     CF set on error
  2173. SeeAlso: AX=0032h
  2174. --------m-2C0032-----------------------------
  2175. INT 2C P - Cloaking v1.01 - FREE V86 CALLBACK
  2176.     AX = 0032h
  2177.     EBX = CS:IP of V86-mode callback handler
  2178. Return: CF clear if successful
  2179.     CF set on error
  2180.         AX = error code
  2181.         0005h invalid callback address
  2182.         0006h callback already free
  2183. SeeAlso: AX=0032h
  2184. --------m-2C0033-----------------------------
  2185. INT 2C P - Cloaking v1.01 - REGISTER CLOAKING CLIENT
  2186.     AX = 0033h
  2187.     DS:EDX -> client registration structure (see #1818)
  2188. Return: CF clear if successful
  2189.     CF set on error (linked list corrupt)
  2190. SeeAlso: AX=0034h,#1967 at INT 2F/AX=4310h"Cloaking"
  2191.  
  2192. Format of client registration structure:
  2193. Offset    Size    Description    (Table 1818)
  2194.  00h    PWORD    link to next structure
  2195.  06h    PWORD    link to previous structure
  2196.  0Ch  2 BYTEs    client version (major, minor)
  2197.  0Eh 20 BYTEs    client name
  2198.  22h    DWORD    physical address of client start
  2199.  26h    DWORD    client's total size in bytes
  2200. Note:    the link area should not be modified once the structure has been
  2201.       used for the registration call
  2202. --------m-2C0034-----------------------------
  2203. INT 2C P - Cloaking v1.01 - UNREGISTER CLOAKING CLIENT
  2204.     AX = 0034h
  2205.     DS:EDX -> client registration structure (see #1818)
  2206. Return: CF clear if successful
  2207.     CF set on error (linked list corrupt)
  2208. Note:    the client must unregister before freeing the XMS block containing
  2209.       its registration structure(s)
  2210. SeeAlso: AX=0033h,#1967 at INT 2F/AX=4310h"Cloaking"
  2211. --------D-2D---------------------------------
  2212. INT 2D - DOS 2+ - RESERVED
  2213. Note:    this vector is not used in DOS versions <= 6.00, and points at an IRET
  2214. BUG:    RM386 v6.00-6.02 (as distributed with Helix's Netroom v3.x) contains
  2215.       a stack bug in its protected-mode INT 2D handler which causes a crash
  2216.       when INT 2D is invoked from V86 mode
  2217. --------t-2D---------------------------------
  2218. INT 2D - ALTERNATE MULTIPLEX INTERRUPT SPECIFICATION (AMIS) [v3.5.2]
  2219.     AH = multiplex number
  2220.     AL = function
  2221.         00h installation check
  2222.         Return: AL = 00h if free
  2223.             AL = FFh if multiplex number in use
  2224.                 CX = binary version number (CH = major, CL = minor)
  2225.                 DX:DI -> signature string (see #1819) identifying
  2226.                     the program using the multiplex number
  2227.         01h get entry point
  2228.         Return: AL = 00h if all API calls via INT 2D
  2229.             AL = FFh if entry point supported
  2230.                 DX:BX -> entry point for bypassing interrupt chain
  2231.         02h uninstall
  2232.         DX:BX = return address for successful uninstall (may be
  2233.             ignored by TSR)
  2234.         Return: AL = status
  2235.                 00h not implemented
  2236.                 01h unsuccessful
  2237.                 02h can not uninstall yet, will do so when able
  2238.                 03h safe to remove, but no resident uninstaller
  2239.                 (TSR still enabled)
  2240.                 BX = segment of memory block with resident code
  2241.                 04h safe to remove, but no resident uninstaller
  2242.                 (TSR now disabled)
  2243.                 BX = segment of memory block with resident code
  2244.                 05h not safe to remove now, try again later
  2245.                 FFh successful
  2246.             return at DX:BX with AX destroyed if successful and
  2247.               TSR honors specific return address
  2248.         03h request pop-up
  2249.         Return: AL = status
  2250.                 00h not implemented or TSR is not a pop-up
  2251.                 01h can not pop up at this time, try again later
  2252.                 02h can not pop up yet, will do so when able
  2253.                 03h already popped up
  2254.                 04h unable to pop up, user intervention required
  2255.                 BX = standard reason code
  2256.                     0000h unknown failure
  2257.                     0001h interrupt chain passes through memory
  2258.                       which must be swapped out to pop up
  2259.                     0002h swap-in failed
  2260.                 CX = application's reason code if nonzero
  2261.                 FFh TSR popped up and was exited by user
  2262.                 BX = return value
  2263.                     0000h no return value
  2264.                     0001h TSR unloaded
  2265.                     0002h-00FFh reserved
  2266.                     0100h-FFFFh application-dependent
  2267.         04h determine chained interrupts
  2268.         BL = interrupt number (except 2Dh)
  2269.         Return: AL = status
  2270.                 00h not implemented
  2271.                 01h (obsolete) unable to determine
  2272.                 02h (obsolete) interrupt hooked
  2273.                 03h (obsolete) interrupt hooked, address returned
  2274.                 DX:BX -> TSR's interrupt BL handler
  2275.                 04h list of hooked interrupts returned
  2276.                 DX:BX -> interrupt hook list (see #1820)
  2277.                 FFh interrupt not hooked
  2278.         Notes:    since INT 2D is known to be hooked, the resident code
  2279.               need not test for BL=2Dh (to minimize its size), and
  2280.               the return value is therefore undefined in that case.
  2281.             BL is ignored if the TSR returns AL=04h; in that case,
  2282.               the caller needs to scan the return list rather than
  2283.               making additional calls to this function.  If the
  2284.               return is not 00h or 04h, then the caller must cycle
  2285.               through the remaining interrupt numbers it wishes to
  2286.               check.
  2287.             return values 01h thru 03h are disparaged and will be
  2288.               removed from the next version of this specification;
  2289.               they are included for compatibility with version 3.3,
  2290.               though they were probably never used in any
  2291.               implementation
  2292.         05h get hotkeys
  2293.         Return: AL = status
  2294.                 00h not implemented
  2295.                 FFh supported
  2296.                 DX:BX -> hotkey list (see #1821)
  2297.         06h-0Fh reserved for future enhancements
  2298.         Return: AL = 00h (not implemented)
  2299.         other  application-dependent
  2300. Notes:    programs should not use fixed multiplex numbers; rather, a program
  2301.       should scan all multiplex numbers from 00h to FFh, remembering the
  2302.       first unused multiplex in case the program is not yet installed.
  2303.       For multiplex numbers which are in use, the program should compare
  2304.       the first 16 bytes of the signature string to determine whether it
  2305.       is already installed on that multiplex number.  If not previously
  2306.       installed, it should use the first free multiplex number.
  2307.     functions other than 00h are not valid unless a program is installed
  2308.       on the selected multiplex number
  2309.     to be considered fully compliant with version 3.5 of the specification,
  2310.       programs must implement at least functions 00h, 02h (no resident
  2311.       uninstall code required), and 04h (return value 04h).     TSRs that
  2312.       provide hotkeys with which the user can activate them must also
  2313.       implement function 05h.  The absolute minimum fully-compliant
  2314.       implementation has an overhead of 64 bytes (80 bytes with function
  2315.       05h) plus 22 bytes per hooked interrupt (for the interrupt sharing
  2316.       protocol header and hook list entry).
  2317.     the signature string and description may be used by memory mappers
  2318.       to display the installed programs
  2319.     to be considered fully compliant, users of this proposal must adhere
  2320.       to the IBM interrupt sharing protocol (see #1825), which will permit
  2321.       removal of TSRs in arbitrary order and interrupt handler reordering.
  2322.       All TSRs following this proposal should be removable, though they
  2323.       need not keep the code for removing themselves resident; it is
  2324.       acceptable for a separate program to perform the removal.
  2325.     A sample implementation including example TSRs and utility programs
  2326.       may be found in a separate package distributed as AMISLnnn.ZIP
  2327.       (AMISL092.ZIP as of this writing).
  2328.     Please let me know if you choose to follow this proposal.  The
  2329.       signature and a list of the private API calls you use would be
  2330.       appreciated, as well.
  2331. SeeAlso: INT 2F
  2332. Index:    installation check;Alternate Multiplex Interrupt Specification
  2333. Index:    installation check;AMIS|installation check;FASTMOUS
  2334. Index:    installation check;SPELLER|installation check;Monitor
  2335. Index:    installation check;NOLPT|installation check;NOTE
  2336. Index:    installation check;RBkeyswp|installation check;SWITCHAR
  2337. Index:    installation check;VGABLANK|installation check;EATMEM
  2338. Index:    installation check;RECALL|installation check;XPTR2
  2339. Index:    uninstall;Alternate Multiplex Interrupt Specification|uninstall;AMIS
  2340. Index:    entry point;Alternate Multiplex Interrupt|entry point;AMIS
  2341.  
  2342. Format of AMIS signature string:
  2343. Offset    Size    Description    (Table 1819)
  2344.  00h  8 BYTEs    blank-padded manufacturer's name (possibly abbreviated)
  2345.  08h  8 BYTEs    blank-padded product name
  2346.  10h 64 BYTEs    ASCIZ product description (optional, may be a single 00h)
  2347. Note:    it is not necessary to reserve a full 64 bytes for the description,
  2348.       just enough to store the actual ASCIZ string
  2349. SeeAlso: #1826
  2350.  
  2351. Format of AMIS interrupt hook list [array]:
  2352. Offset    Size    Description    (Table 1820)
  2353.  00h    BYTE    interrupt number (last entry in array is 2Dh)
  2354.  01h    WORD    offset within hook list's segment of the interrupt handler
  2355.         this will point at the initial short jump of the interrupt
  2356.           sharing protocol header (see #1825)
  2357.  
  2358. Format of AMIS hotkey list:
  2359. Offset    Size    Description    (Table 1821)
  2360.  00h    BYTE    type of hotkey checking (see #1822)
  2361.  01h    BYTE    number of hotkeys (may be zero if TSR can disable hotkeys)
  2362.  02h 6N BYTEs    array of hotkey definitions
  2363.         (one per hotkey, first should be primary hotkey)
  2364.         Offset    Size    Description
  2365.          00h    BYTE    hotkey scan code (00h/80h if shift states only)
  2366.                 hotkey triggers on release if bit 7 set
  2367.          01h    WORD    required shift states (see #1823)
  2368.          03h    WORD    disallowed shift states (see #1823)
  2369.          05h    BYTE    hotkey flags (see #1824)
  2370. Notes:    except for bit 7, the shift states correspond exactly to the return
  2371.       values from INT 16/AH=12h.  A set bit in the required states word
  2372.       indicates that the corresponding shift state must be active when the
  2373.       hotkey's scan code is received for the hotkey to be recognized; a
  2374.       clear bit means that the corresponding state may be ignored.    A set
  2375.       bit in the disallowed shift states word indicates that the
  2376.       corresponding shift state must be inactive.
  2377.     for the disallowed-states word, if one of the "either" bits is set,
  2378.       then both the corresponding left bit and right bit must be set
  2379.     examples:
  2380.         Ctrl-Alt-Del monitoring: 53h 000Ch 0003h 06h
  2381.         Alt-key tap (DESQview):     B8h 0000h 0007h 08h
  2382.         Shf-Shf-N (NOTE.COM):     31h 0003h 000Ch 00h
  2383. Index:    hotkeys;AMIS
  2384. SeeAlso: #0005
  2385.  
  2386. Bitfields for type of AMIS hotkey checking:
  2387. Bit(s)    Description    (Table 1822)
  2388.  0    checks before chaining INT 09
  2389.  1    checks after chaining INT 09
  2390.  2    checks before chaining INT 15/AH=4Fh
  2391.  3    checks after chaining INT 15/AH=4Fh
  2392.  4    checks on INT 16/AH=00h,01h,02h
  2393.  5    checks on INT 16/AH=10h,11h,12h
  2394.  6    checks on INT 16/AH=20h,21h,22h
  2395.  7    reserved (0)
  2396. SeeAlso: #1821
  2397.  
  2398. Bitfields for AMIS shift states:
  2399. Bit(s)    Description    (Table 1823)
  2400.  0    right shift pressed
  2401.  1    left shift pressed
  2402.  2    either control key pressed
  2403.  3    either Alt key pressed
  2404.  4    ScrollLock active
  2405.  5    NumLock active
  2406.  6    CapsLock active
  2407.  7    either shift key pressed
  2408.  8    left control key pressed
  2409.  9    left Alt key pressed
  2410.  10    right control key pressed
  2411.  11    right Alt key pressed
  2412.  12    ScrollLock pressed
  2413.  13    NumLock pressed
  2414.  14    CapsLock pressed
  2415.  15    SysReq key pressed
  2416. Notes:    if bit 2 is set, either control key may be pressed for the hotkey; if
  2417.       bits 8 and 10 are both set, then both control keys must be pressed.
  2418.       Similarly for bits 3 and 9/11, as well as 7 and 0/1.
  2419.     the SysReq key is often labeled SysRq
  2420. SeeAlso: #1821,#1824
  2421.  
  2422. Bitfields for AMIS hotkey flags:
  2423. Bit(s)    Description    (Table 1824)
  2424.  0    hotkey chained before processing
  2425.  1    hotkey chained after processing
  2426.  2    others should pass through this hotkey so that it can be monitored
  2427.  3    hotkey will not activate if other keys pressed/released before hotkey
  2428.       press is completed
  2429.  4    this key is remapped into some other key
  2430.  5    this key is conditionally chained (sometimes passed on, sometimes
  2431.       swallowed)
  2432.  6-7    reserved (0)
  2433. SeeAlso: #1821,#1823
  2434.  
  2435. Format of interrupt sharing protocol interrupt handler entry point:
  2436. Offset    Size    Description    (Table 1825)
  2437.  00h  2 BYTEs    short jump to actual start of interrupt handler, immediately
  2438.           following this data block (EBh 10h)
  2439.  02h    DWORD    address of next handler in chain
  2440.  06h    WORD    signature 424Bh
  2441.  08h    BYTE    EOI flag
  2442.         00h software interrupt or secondary hardware interrupt handler
  2443.         80h primary hardware interrupt handler (will issue EOI)
  2444.  09h  2 BYTEs    short jump to hardware reset routine
  2445.         must point at a valid FAR procedure (may be just RETF)
  2446.  0Bh  7 BYTEs    reserved (0)
  2447. SeeAlso: INT F1"Common ISDN API",#3158
  2448.  
  2449. (Table 1826)
  2450. Values for AMIS signatures known to be in use:
  2451.  'Byrial J' 'EKLAVO  '    permits keyboard entry of Esperanto accented letters
  2452.  'CoveSoft' 'Burnout+'    shareware screen saver Burnout Plus
  2453.  'Crynwr  ' 'SPELLER '    TSR spelling-checker
  2454.  'CPH1995 ' 'CDTSR   '    resident CD-Audio player
  2455.  'CSJewell' 'Modula3L'    Curtis Jewell's Modula-3 compiler (non-TSR)
  2456.  'DAISYCHA' 'INDRIVER'    Advanced Parallel Port daisy chain driver (vendor name
  2457.               in product description field, if desired)
  2458.             (see also INT 2D/AL=DCh)
  2459.  'DTown SD' 'DTU     '    DTown Software Development's DTown Utilities
  2460.             (see also INT 2D/AL=20h)
  2461.  'ECLIPSE ' 'PLUMP   '    Eclipse Software's printer and plotter spooler
  2462.  'GraySoft' 'GIPC    '    GraySoft's Inter-Process Communications driver
  2463.  'heathh  ' 'Monitor '
  2464.  'Helge O '        TSRs by Helge Olav Helgesen
  2465.  'J. Berry' 'RATSR   '    RemoteAccess Network Manager workstation module
  2466.  'JWB      ' 'RAMLIGHT'    James Birdsall's on-screen RAMdisk activity indicator
  2467.  'M Better' 'iHPFS   '    Marcus Better's HPFS filesystem driver for DOS
  2468.  'Nildram ' 'ST         '    Screen Thief graphics screen grabber
  2469.  'Pino Nav' 'Keybit  '    Pino Navato's KEYBIT Lite Italian keyboard driver v4+
  2470.  'PowrQuot' 'CAPRITSR'
  2471.  'R-Ware  ' 'dLite   '    run-time data decompression TSR
  2472.  'Ralf B  ' 'disaXXYY'  RBdisabl -- disable key scancode XX w/ shift states YY
  2473.  'Ralf B  ' 'FASTMOUS'    example TSR included with sample AMIS library code
  2474.  'Ralf B  ' 'NoBreak '  disable Ctrl-@, Ctrl-C, and Ctrl-Break keys
  2475.  'Ralf B  ' 'NOLPT n '    example TSR -- turn LPTn into bit-bucket
  2476.  'Ralf B  ' 'NOTE    '    example TSR -- popup note-taker
  2477.  'Ralf B  ' 'RBclock '  RBclock -- on-screen real-time clock
  2478.  'Ralf B  ' 'RBclockE'  RBclock -- on-screen elapsed-time clock
  2479.  'Ralf B  ' 'RBdvorak'  Dvorak keyboard mapping w/ opt Esc/~, LCtrl/CapsLk swap
  2480.  'Ralf B  ' 'RBkcount'  display count of keystrokes on screen
  2481.  'Ralf B  ' 'RBkeyswp'    RBkeyswap v3.0+ -- swap Esc/~ and LCtrl/CapsLock keys
  2482.  'Ralf B  ' 'RBnoboot'  disable Ctrl-Alt-Del key combination
  2483.  'Ralf B  ' 'ShftCaps'  require Shift-CapsLock to turn on CapsLock
  2484.  'Ralf B  ' 'ShftNumL'  require Shift-NumLock to turn off NumLock
  2485.  'Ralf B  ' 'SWITCHAR'    example TSR -- add switchar() support removed from DOS5
  2486.  'Ralf B  ' 'VGABLANK'    VGA-only screen blanker
  2487.  'Sally IS' 'Mdisk   '    removeable, resizeable RAMdisk
  2488.  'Sally IS' 'Scr2Tex '    screen dumper with output in (La)Tex format
  2489.  'Thaco      ' 'NEST    '    Eirik Pedersen's programmer's delimiter matcher
  2490.  'TifaWARE' 'EATMEM  '    George A. Theall's public domain memory restrictor for
  2491.             testing programs (v1.1+)
  2492.  'TifaWARE' 'RECALL  '    public domain commandline editor and history (v1.2+)
  2493.  'Todd      ' 'XPTR2   '    PC-to-Transputer interface by Todd Radel
  2494. SeeAlso: #1819
  2495. --------N-2D--10-----------------------------
  2496. INT 2D - RATSR 2.0+ - GET STATUS
  2497.     AL = 10h
  2498.     AH = AMIS multiplex number for RATSR
  2499. Return: AL = status
  2500.         01h listening (no connection)
  2501.         02h receiving          \
  2502.         03h sending               > station being monitored
  2503.         04h initializing receive  /
  2504.     AH = keyboard lock status (00h unlocked, 01h locked)
  2505. Program: RATSR is a utility by James Berry provided with
  2506.       RemoteAccess/Professional, a commercial bulletin board system, that
  2507.       allows remote control of a station over a network
  2508. SeeAlso: INT 2D"AMIS"
  2509. --------d-2D--10-----------------------------
  2510. INT 2D - dLite 1.0+ - GET PARAMETER BLOCK ADDRESS
  2511.     AL = 10h
  2512.     AH = AMIS multiplex number for dLite
  2513. Return: CF clear if successful
  2514.         ES:BX -> parameter block (see #1827)
  2515.     CF set on error
  2516. Program: dLite is a shareware TSR by Rainer Schuetze which transparently
  2517.       expands compressed files when they are read
  2518. SeeAlso: AL=11h"dLite",AL=12h"dLite",INT 21/AX=FEDCh"PCMANAGE"
  2519.  
  2520. Format of dLite parameter block:
  2521. Offset    Size    Description    (Table 1827)
  2522.  00h    BYTE    TSR flags (see #1828)
  2523.  01h    WORD    maximum number of programs needing original filesize
  2524.  03h    WORD    current number of programs needing original filesize
  2525.  05h    WORD    maximum number of files that can be handled by dLite (should
  2526.           be the same as FILES= in CONFIG.SYS)
  2527.  07h    WORD    offset (in the same segment as the parameter block) of the
  2528.           table of programs needing the original filesize (8 bytes
  2529.           each,    without path or extension, uppercase, and zero \
  2530.           terminated if    shorter than 8 bytes)
  2531.  
  2532. Bitfields for dLite TSR flags:
  2533. Bit(s)    Description    (Table 1828)
  2534.  0    deny FCB access
  2535.  1    dLite sleeping rather than activated
  2536.  2    always indicate original filesize when reading directory entries,
  2537.       rather than only for specified programs
  2538.  3-7    reserved
  2539. SeeAlso: #1827
  2540. --------V-2D--10-----------------------------
  2541. INT 2D - Burnout Plus v3.00 - GET STATE/CONTROL INFORMATION
  2542.     AL = 10h
  2543.     AH = AMIS multiplex number for Burnout Plus
  2544. Return: AL = 01h
  2545.     BX = Burnout Plus status (see #1829)
  2546.     CX = record of features loaded (see #1830)
  2547.     ES:DI -> Burnout Plus control structure (see #1831)
  2548. Program: Burnout Plus is a DOS screen saver from Cove Software
  2549. SeeAlso: INT 14/AX=AA01h,INT 2D"AMIS"
  2550. Index:    screen saver;Burnout Plus
  2551.  
  2552. Bitfields for Burnout Plus status:
  2553. Bit(s)    Description    (Table 1829)
  2554.  0    screen is blanked
  2555.  1    MS Windows is active (Burnout Plus deactivated)
  2556.  2-15    reserved
  2557.  
  2558. Bitfields for Burnout Plus features loaded/features enabled:
  2559. Bit(s)    Description    (Table 1830)
  2560.  0    mouse activity monitor
  2561.  1    passkey support
  2562.  2    password support
  2563.  3    continuous clear
  2564.  4    software blanking
  2565.  5    video activity monitor
  2566.  6    disk activity monitor
  2567.  7    activating keystroke suppression
  2568. SeeAlso: #1831
  2569.  
  2570. Format of Burnout Plus control structure:
  2571. Offset    Size    Description    (Table 1831)
  2572.  00h    BYTE    size of structure in bytes
  2573.  01h    WORD    Burnout Plus version
  2574.  03h    WORD    screen blanking reset count in clock ticks
  2575.  05h    WORD    current countdown value in clock ticks
  2576.  07h    BYTE    type of timeout specification
  2577.  08h    BYTE    instant-blank hotkey
  2578.  09h    WORD    extended status information (see #1832)
  2579.         the bits for password, passkey, and software blanking are
  2580.           ignored and cannot be enabled or disabled externally
  2581.  0Bh    WORD    features enabled (see #1830)
  2582. Note:    all fields except the first two may be modified by external programs
  2583.       to affect the operation of Burnout Plus
  2584. Index:    hotkeys;Burnout Plus
  2585.  
  2586. Bitfields for extended Burnout Plus status information:
  2587. Bit(s)    Description    (Table 1832)
  2588.  0    Burnout Plus disabled
  2589.  1    force screen to blank on next clock tick
  2590.  2    restore screen if currently blanked
  2591.  3-15    reserved
  2592. Note:    1 and 2 are automatically cleared by Burnout Plus after blanking
  2593.       or restoring the screen
  2594. SeeAlso: #1831
  2595. --------V-2D--10-----------------------------
  2596. INT 2D U - Screen Thief v1.00 - FREE HIGH MEMORY BUFFERS
  2597.     AL = 10h
  2598.     AH = AMIS multiplex number for Screen Thief
  2599. Return: nothing
  2600. Program: Screen Thief is a graphics screen grabber
  2601. Note:    releases any code and data stored in EMS, DOS UMBs, or XMS UMBs, but
  2602.       does not release the low-memory stub; this may be used to effect a
  2603.       partial uninstall if INT 2D/AL=02h fails
  2604. SeeAlso: INT D8"Screen Thief"
  2605. --------i-2D--10-----------------------------
  2606. INT 2D U - RAMLIGHT v1.0 - GET MONITORING INFORMATION
  2607.     AL = 10h
  2608.     AH = AMIS multiplex number for RAMLIGHT
  2609. Return: ES:BX -> array of fake device driver headers used in monitoring
  2610.     CX = number of drives being monitored???
  2611. --------U-2D--10-----------------------------
  2612. INT 2D - DTown Utilities v1.40+ - EXTENDED API INSTALLATION CHECK
  2613.     AL = 10h
  2614. Return: AL = FFh
  2615.     BL = extended API availability (00h no, 01h API is loaded)
  2616. SeeAlso: INT 2D/AL=11h"DTown",INT 2D/AL=20h,INT 2D/AL=50h
  2617. --------s-2D--10-----------------------------
  2618. INT 2D - CDTSR - GET INTERNAL VARIABLE TABLE
  2619.     AL = 10h
  2620.     AH = AMIS multiplex number for CDTSR
  2621. Return: CX:DX -> CDTSR internal variable structure (see #1833)
  2622. Program: CDTSR is a resident audio CD player by Colin Hill
  2623. SeeAlso: INT 2D/AL=11h"CDTSR",INT 2D/AL=12h"CDTSR",INT 2D/AL=13h"CDTSR"
  2624.  
  2625. Format of CDTSR internal variable structure:
  2626. Offset    Size    Description    (Table 1833)
  2627.  00h    BYTE    hotkey scan code (see #0005)
  2628.  01h    BYTE    hotkey shift states
  2629.  02h    BYTE    flag: repeat
  2630.  03h    BYTE    flag: custom repeat
  2631.  04h    BYTE    flag: background polling
  2632.  05h    DWORD    (read-only) internal timing variable
  2633.  09h    DWORD    current track play position, in frames
  2634.  0Dh    DWORD    current disk play position, in frames
  2635.  11h    BYTE    number of entries in track program
  2636.  12h    BYTE    index into track program currently playing (FFh if not playing)
  2637.  13h 100 BYTEs    track program (each byte contains one track number)
  2638.  77h    BYTE    saved cursor end scan line
  2639.  78h    BYTE    saved cursor start scan line
  2640.  79h    BYTE    currently playing track
  2641.  7Ah    BYTE    CD driver media-change flag
  2642.  7Bh    WORD    video base segment during last popup
  2643.  7Dh    WORD    video page offset during last popup
  2644.  7Fh    BYTE    currently-selected track
  2645.  80h    DWORD    begin of custom repeat, in frames
  2646.  84h    DWORD    end of custom repeat, in frames
  2647.  88h    WORD    track program index of top list item
  2648. --------K-2D--10-----------------------------
  2649. INT 2D - KEYBIT Lite v5+ - GET POINTER TO STATUS BYTE
  2650.         AL = 10h
  2651.         AH = AMIS multiplex number for KEYBIT Lite
  2652. Return: DX:BX -> status byte (see #3174)
  2653. Program: KEYBIT Lite is an enhanced Italian keyboard driver by Pino Navato.
  2654. SeeAlso: INT 2D"AMIS"
  2655.  
  2656. Bitfields for KEYBIT Lite status byte:
  2657. Bit(s)  Description     (Table 3174)
  2658.  7      KEYBIT Lite active
  2659.  6      E-mail support active
  2660.  5-0    reserved
  2661. Notes:  E-mail support is one of the original features of KEYBIT Lite.  It is
  2662.           the automatic conversion of the 8-bits ASCII chars produced by some
  2663.           keys available on Italian keyboards to couples of 7-bits chars.
  2664.         Message editors should always enable e-mail support, they should also
  2665.           restore its original status before exiting.
  2666.         The user can change both status bits by hotkeys.
  2667. --------d-2D--11-----------------------------
  2668. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET ORIGINAL SIZE
  2669.     AL = 11h
  2670.     AH = AMIS multiplex number for dLite
  2671.     BX = file handle
  2672. Return: CF clear if successful
  2673.         DX:AX = size of uncompressed file
  2674.     CF set on error (not dPressed file)
  2675. SeeAlso: AL=10h"dLite",AL=12h"dLite"
  2676. --------U-2D--11-----------------------------
  2677. INT 2D - DTown Utilities v1.40+ - UTILITY INSTALLATION CHECK
  2678.     AL = 11h
  2679.     BL = function
  2680.         00h get number of installed utilities
  2681.         Return: BL = number of utilities
  2682.         01h get installed utilities
  2683.         DX:DI -> buffer containing one byte for each utility
  2684.         Return: DX:DI buffer filled with flags (0=no,1=yes) indicating
  2685.               whether the corresponding utility is loaded
  2686. Return: AL = FFh if supported
  2687. Note:    this function is only available if the extended API has been installed
  2688.       in the resident portion
  2689. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h
  2690. --------s-2D--11-----------------------------
  2691. INT 2D - CDTSR - REPROGRAM CDTSR
  2692.     AL = 11h
  2693.     AH = AMIS multiplex number for CDTSR
  2694. Return: nothing
  2695. Program: CDTSR is a resident audio CD player by Colin Hill
  2696. Desc:    reprograms CDTSR based on the values in the internal variable
  2697.       structure (see #1833), which may have been changed by an application
  2698. SeeAlso: INT 2D/AL=10h"CDTSR",INT 2D/AL=12h"CDTSR",INT 2D/AL=13h"CDTSR"
  2699. --------d-2D--12-----------------------------
  2700. INT 2D - dLite 1.0+ - CHECK FOR dPressed FILE AND GET COMPRESSED SIZE
  2701.     AL = 12h
  2702.     AH = AMIS multiplex number for dLite
  2703.     BX = file handle
  2704. Return: CF clear if successful
  2705.         DX:AX = size of compressed file
  2706.     CF set on error (not dPressed file)
  2707. SeeAlso: AL=10h"dLite",AL=11h"dLite"
  2708. --------s-2D--12-----------------------------
  2709. INT 2D - CDTSR - DISABLE POPUP
  2710.     AL = 12h
  2711.     AH = AMIS multiplex number for CDTSR
  2712. Return: nothing
  2713. SeeAlso: INT 2D/AL=10h"CDTSR",INT 2D/AL=11h"CDTSR",INT 2D/AL=13h"CDTSR"
  2714. --------s-2D--13-----------------------------
  2715. INT 2D - CDTSR - ENABLE POPUP
  2716.     AL = 13h
  2717.     AH = AMIS multiplex number for CDTSR
  2718. Return: nothing
  2719. Program: CDTSR is a resident audio CD player by Colin Hill
  2720. SeeAlso: INT 2D/AL=10h"CDTSR",INT 2D/AL=11h"CDTSR",INT 2D/AL=12h"CDTSR"
  2721. --------U-2D--20-----------------------------
  2722. INT 2D - DTown Utilities v1.40+ - GET POP-UP HANDLER ADDRESS
  2723.     AL = 20h
  2724. Return: AL = FFh if available
  2725.         DX:DI -> DTU popup-handler
  2726. Program: DTown Utilities is a shareware programmer's utility TSR by Jeroen van
  2727.       Disseldorp
  2728. Note:    this function is only available if the extended API has been installed
  2729.       in the resident portion
  2730. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=21h,INT 2D/AL=50h,INT 2D/AL=51h
  2731. SeeAlso: INT 03"DTown"
  2732. --------U-2D--21-----------------------------
  2733. INT 2D - DTown Utilities v1.40+ - POP UP
  2734.     AL = 21h
  2735.     BL = which utility to bring up
  2736.         00h active utility
  2737.         01h help screen
  2738.         0Ah ASCII table
  2739.         0Bh memory view
  2740.         0Ch CPU status
  2741.         0Dh calculator
  2742.         0Eh miscellaneous
  2743.         0Fh file viewer
  2744.         10h disassembler
  2745. Return: AL = status
  2746.         00h already active
  2747.         FFh popped up successfully
  2748.     BX = 0000h
  2749. Note:    this function is only available if the extended API has been installed
  2750.       in the resident portion
  2751. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h,INT 2D/AL=50h
  2752. --------U-2D--50-----------------------------
  2753. INT 2D - DTown Utilities v1.40+ - MEMORY VIEW SET ADDRESS
  2754.     AL = 50h
  2755.     CX:DX = new address for start of memory view utility's display
  2756. Note:    this function is only available if the extended API has been installed
  2757.       in the resident portion
  2758. Return: AL = FFh if supported
  2759. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h,INT 2D/AL=21h,INT 2D/AL=51h
  2760. --------U-2D--51-----------------------------
  2761. INT 2D - DTown Utilities v1.40+ - MEMORY VIEW SET REFERENCE
  2762.     AL = 51h
  2763.     BL = reference ("bookmark") number
  2764.     CX:DX = new address for reference
  2765. Return: AL = status
  2766.         00h invalid index
  2767.         FFh reference set
  2768. Note:    this function is only available if the extended API has been installed
  2769.       in the resident portion
  2770. Program: DTown Utilities is a shareware programmer's utility TSR by Jeroen van
  2771.       Disseldorp
  2772. SeeAlso: INT 2D/AL=10h"DTown",INT 2D/AL=20h,INT 2D/AL=50h
  2773. --------b-2D--DC-----------------------------
  2774. INT 2D C - DAISY.SYS - BROADCAST: CHAIN RESCANNED
  2775.     AL = DCh
  2776.     AH = AMIS multiplex number for signature 'DAISYCHA' 'INDRIVER'
  2777.     DL = LPT Port Rescanned
  2778. Program: DAISY.SYS is a daisy chain manager for parallel port peripherals
  2779.       conforming to the IEEE 1284.3 Committee's daisy chain specification.
  2780. Desc:    This Broadcast is sent whenever daisy chain IDs are reassigned to
  2781.       warn parallel port device drivers that their daisy chain ID may
  2782.       have been changed.
  2783. Note:    This function is a callout from DAISY.SYS, NOT a call into DAISY.SYS
  2784. SeeAlso: INT 17/AX=0200h"Enhanced Parallel Port",#0514,#1826
  2785. --------l-2E---------------------------------
  2786. INT 2E U - DOS 2+ - PASS COMMAND TO COMMAND INTERPRETER FOR EXECUTION
  2787.     DS:SI -> commandline to execute (see #1834)
  2788. Return: all registers except CS:IP destroyed
  2789.     AX = status (4DOS v4.0)
  2790.        0000h successful
  2791.        FFFFh error before processing command (not enough memory, etc)
  2792.        other error number returned by command
  2793. Notes:    this call allows execution of arbitrary commands (including COMMAND.COM
  2794.       internal commands) without loading another copy of COMMAND.COM
  2795.     if COMMAND.COM is the user's command interpreter, the primary copy
  2796.       executes the command; this allows the master environment to be
  2797.       modified by issuing a "SET" command, but changes in the master
  2798.       environment will not become effective until all programs descended
  2799.       from the primary COMMAND.COM terminate
  2800.     since COMMAND.COM processes the string as if typed from the keyboard,
  2801.       the transient portion needs to be present, and the calling program
  2802.       must ensure that sufficient memory to load the transient portion can
  2803.       be allocated by DOS if necessary
  2804.     results are unpredictable if invoked by a program run from a batch file
  2805.       because this call is not reentrant and COMMAND.COM uses the same
  2806.       internal variables when processing a batch file
  2807.     hooked but ignored by 4DOS v3.0 COMMAND.COM replacement unless SHELL2E
  2808.       has been loaded
  2809.     the MS-DOS 5 Programmer's Reference calls this "Reload Transient"
  2810.  
  2811. Format of DOS commandline:
  2812. Offset    Size    Description    (Table 1834)
  2813.  00h    BYTE    length of command string, not counting trailing CR
  2814.  01h    var    command string
  2815.   N    BYTE    0Dh (CR)
  2816. --------O-2E---------------------------------
  2817. INT 2E UP - Windows NT - NATIVE API
  2818.     EAX = function number
  2819.     EDX = address of parameter block
  2820. Return: ???
  2821. --------l-2E----BXE22E-----------------------
  2822. INT 2E - 4DOS v2.x-3.03 SHELL2E.COM - UNINSTALL
  2823.     BX = E22Eh
  2824.     DS:SI -> zero byte
  2825. Return: if successful, SHELL2E terminates itself with INT 21/AH=4Ch
  2826. ----------2F---------------------------------
  2827. INT 2F - Multiplex - NOTES
  2828.     AH = identifier of program which is to handle the interrupt
  2829.        00h-7Fh reserved for DOS
  2830.        B8h-BFh reserved for networks
  2831.        C0h-FFh reserved for applications
  2832.     AL is the function code
  2833.    This is a general mechanism for verifying the presence of a TSR and
  2834.    communicating with it.  When searching for a free identifier code for AH
  2835.    using the installation check (AL=00h), the calling program should set
  2836.    BX/CX/DX to 0000h and must not depend on any registers other than CS:IP
  2837.    and SS:SP to be valid on return, since numerous programs now use additional
  2838.    registers on input and/or output for the installation check.
  2839. Notes:    Since the multiplex chain is growing so long, and beginning to
  2840.       experience multiplex number collisions, I am proposing an alternate
  2841.       multiplex interrupt on INT 2D.  If you decide to use the alternate
  2842.       multiplex, please let me know.
  2843.     DOS and some other programs return values in the flags register, so
  2844.       any TSR which chains by calling the previous handler rather than
  2845.       jumping to it should ensure that the returned flags are preserved
  2846.       and passed back to the original caller
  2847. SeeAlso: INT 2D
  2848. --------t-2F---------------------------------
  2849. INT 2F - BMB Compuscience Canada Utilities Interface - INSTALLATION CHECK
  2850.     AH = xx (dynamically assigned based upon a search for a multiplex
  2851.          number which doesn't answer installed)
  2852.     AL = 00h installation check
  2853.     ES:DI = EBEBh:BEBEh
  2854. Return: AL = 00h not installed
  2855.          01h not installed, not OK to install
  2856.          FFh installed; if ES:DI was EBEBh:BEBEh on entry, ES:DI will point
  2857.          to a string of the form 'MMMMPPPPPPPPvNNNN' where MMMM is a
  2858.          short form of the manufacturer's name, PPPPPPPP is a product
  2859.          name and NNNN is the product's version number
  2860. --------t-2F---------------------------------
  2861. INT 2F - Ross Wentworth's Turbo Pascal POPUP LIBRARY
  2862.     AH = programmer-selected multiplex number
  2863.     AL = function
  2864.         00h installation check
  2865.         Return: AL = FFh if installed
  2866.         01h get TSR interrupt vectors
  2867.         Return: DX:AX -> vector table (see #1835)
  2868.         02h get TSR code segment
  2869.         Return: AX = code segment for all interrupt handlers
  2870.         03h call user exit routine and release TSR's memory
  2871.         04h get signature string
  2872.         Return: DX:AX -> counted string containing signature
  2873.         05h get TSR's INT 2F handler
  2874.         Return: DX:AX -> INT 2F handler
  2875.         06h enable/disable TSR
  2876.         BL = new state (00h disabled, 01h enabled)
  2877.         07h activate TSR (popup if not disabled)
  2878.         08h get hotkeys
  2879.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  2880.         Return: AX = hotkey (AH = keyflags, AL = scancode)
  2881.         09h set hotkey
  2882.         BL = which hotkey (00h = hotkey 1, 01h = hotkey 2)
  2883.         CX = new hotkey (CH = keyflags, CL = scancode)
  2884.         0Ah-1Fh reserved
  2885. Index:    installation check;Ross Wentworth POPUP library
  2886. Index:    hotkeys;Ross Wentworth POPUP library
  2887.  
  2888. Format of POPUP vector table entry:
  2889. Offset    Size    Description    (Table 1835)
  2890.  00h    BYTE    vector number (00h = end of table)
  2891.  01h    DWORD    original vector
  2892.  05h    WORD    offset of interrupt handler in TSR's code segment
  2893. --------t-2F---------------------------------
  2894. INT 2F - CiriSOFT Spanish University of Valladolid TSR's Interface
  2895.     AH = xx (dynamically assigned based upon a search for a multiplex
  2896.          number from C0h to FFh which doesn't answer installed)
  2897.     AL = 00h installation check
  2898.     ES:DI = 1492h:1992h
  2899. Return: AL = 00h not installed
  2900.          01h not installed, not OK to install
  2901.          FFh installed; and if ES:DI was 1492h:1992h on entry, ES:DI will
  2902.            point to author_name_ver table (see #1836)
  2903.     AH = FFh
  2904. Note:    this interface permits advanced communication with TSRs: it is possible
  2905.       to make a generic uninstall utility, advanced TSR relocator programs
  2906.       in order to fit fragmented memory areas, etc.
  2907. See also: INT 2D"AMIS",INT 2F"Compuscience"
  2908. Index:    installation check;CiriSOFT TSR interface
  2909. Index:    uninstall;CiriSOFT TSR interface
  2910.  
  2911. Format of CiriSOFT author_name_ver table:
  2912. Offset    Size    Description    (Table 1836)
  2913.  -16    WORD    segment of the start of the resident TSR code (CS in programs
  2914.           with PSP, XMS upper memory segment if installed as UMB...)
  2915.  -14    WORD    offset of the start of the resident TSR code (frequently 100h
  2916.           in *.COM programs and 0 in upper memory TSR's).
  2917.  -12    WORD    memory used by TSR (in paragraphs). Knowing the memory area
  2918.           used by TSR is possible to determine if hooked vectors are
  2919.           still pointing it (and if it is safe to uninstall).
  2920.  -10    BYTE    characteristics byte (see #1837)
  2921.  -9    BYTE    number of multiplex entry used (redefinition available). Note
  2922.           that the TSR must use THIS variable in it's INT 2Fh handler.
  2923.  -8    WORD    offset to vector_area table (see #1838)
  2924.  -6    WORD    offset to extra_area table (see #1839,bit 7 in offset -10)
  2925.  -4   4 BYTEs    signature string "*##*"
  2926.  00h    var    "AUTHOR:PROGRAM_NAME:VERSION",0     (variable length, this area
  2927.           is used in order to determine if the TSR is already resident
  2928.           and it's version code; the ':' char is used as delimiter)
  2929.  
  2930. Bitfields for CiriSOFT characteristics byte:
  2931. Bit(s)    Description    (Table 1837)
  2932.  0-2    type
  2933.     000 normal program (with PSP)
  2934.     001 upper XMS memory block (needed HIMEM.SYS function to free memory
  2935.           when uninstalling)
  2936.     010 device driver (*.SYS)
  2937.     011 device driver in EXE format
  2938.     1xx others (reserved)
  2939.  3-6    reserved
  2940.  7    set if extra_table defined and supported (see #1839)
  2941. SeeAlso: #1836
  2942.  
  2943. Format of CiriSOFT vector_area table:
  2944. Offset    Size    Description    (Table 1838)
  2945.  -1    BYTE    number of vectors intercepted by TSR
  2946.  00h    BYTE    first vector number
  2947.  01h    DWORD    first vector pointer before installing the TSR
  2948.  05h    BYTE    second vector number
  2949.  06h    DWORD    second vector pointer before installing the TSR
  2950.  0Ah    ...    (and so on)
  2951. Note:    the TSR must use these variables to invoke the previous interrupt
  2952.       handler routines
  2953. SeeAlso: #1836
  2954.  
  2955. Format of extra_area table (needed only to improve relocation feature):
  2956. Offset    Size    Description    (Table 1839)
  2957.  00h    WORD    offset to external_ctrl table (see #1840)
  2958.         0000h if not supported
  2959.  02h    WORD    reserved for future use (0)
  2960. SeeAlso: #1836
  2961.  
  2962. Format of CiriSOFT external_ctrl table:
  2963. Offset    Size    Description    (Table 1840)
  2964.  00h    BYTE    bit 0: TSR is relocatable (no absolute segment references)
  2965.  01h    WORD    offset to a variable which can activate/inhibit the TSR
  2966.  ---And if bit 0 in offset 00h is off:
  2967.  03h    DWORD    pointer to ASCIZ pathname for executable file which supports
  2968.           /SR parameter (silent installation & inhibit)
  2969.  07h    DWORD    pointer to first variable to initialize on the copy reloaded
  2970.           from the previous TSR still resident
  2971.  0Bh    DWORD    pointer to last variable (all variables packed in one block)
  2972. --------c-2F00-------------------------------
  2973. INT 2F U - DOS 2.x only PRINT.COM - ???
  2974.     AH = 00h
  2975.     ???
  2976. Return: ???
  2977. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  2978.     values in AH other than 00h or 01h cause PRINT to return the number of
  2979.       files in the queue in AH
  2980. SeeAlso: AH=01h
  2981. --------P-2F00-------------------------------
  2982. INT 2F U - PSPRINT - PRINT JOB CONTROL
  2983.     AH = 00h
  2984.     ???
  2985. Return: ???
  2986. --------c-2F0080-----------------------------
  2987. INT 2F - DOS 3.1+ PRINT - GIVE PRINT A TIME SLICE
  2988.     AX = 0080h
  2989. Return: after PRINT executes
  2990. Notes:    PRINT returns AL=01h if AH=00h but AL is not 80h on entry
  2991.     this function is not supported by the Novell DOS 7 PRINT.COM
  2992. --------N-2F00D8-----------------------------
  2993. INT 2F - Personal NetWare - VLM - ???
  2994.     AX = 00D8h
  2995.     ???
  2996. Return: ???
  2997. Note:    hooked by one of the .VLMs loaded by VLM.EXE v1.10, but apparently a
  2998.       NOP
  2999. --------c-2F01-------------------------------
  3000. INT 2F U - DOS 2.x only PRINT.COM - ???
  3001.     AH = 01h
  3002.     ???
  3003. Return: ???
  3004. Notes:    DOS 2.x PRINT.COM does not chain to previous INT 2F handler
  3005.     values in AH other than 00h or 01h cause PRINT to return the number of
  3006.       files in the queue in AH
  3007. SeeAlso: AH=00h
  3008. --------c-2F0100-----------------------------
  3009. INT 2F - DOS 3.0+ PRINT - INSTALLATION CHECK
  3010.     AX = 0100h
  3011. Return: AL = status
  3012.         00h not installed
  3013.         01h not installed, but not OK to install
  3014.         FFh installed
  3015.         AH = 00h (Novell DOS 7)
  3016. SeeAlso: AX=0101h
  3017. --------c-2F0100SI20D6-----------------------
  3018. INT 2F U - PrintCache 3.1 PRINT.COM - INSTALLATION CHECK
  3019.     AX = 0100h
  3020.     SI = 20D6h
  3021.     DI = 8761h
  3022. Return: AX = 00FFh if installed
  3023.     DI = 0001h if PrintCache's PRINT.COM installed and magic values match
  3024.         SI = resident code segment
  3025. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  3026.       LaserTools' PrintCache memory/disk-based print spooler package
  3027. Note:    if either of SI or DI differ from the indicated magic values, only AX
  3028.       will be modified on return, for compatibility with DOS PRINT
  3029. SeeAlso: AX=0101h/SI=20D6h,AX=C000h"PCACHE"
  3030. --------c-2F0101-----------------------------
  3031. INT 2F - DOS 3.0+ PRINT - SUBMIT FILE FOR PRINTING
  3032.     AX = 0101h
  3033.     DS:DX -> submit packet (see #1841)
  3034. Return: CF clear if successful
  3035.         AL = status
  3036.         01h added to queue
  3037.         9Eh now printing
  3038.     CF set on error
  3039.         AX = error code (see #1842,#0960 at INT 21/AH=59h)
  3040. SeeAlso: AX=0102h
  3041.  
  3042. Format of PRINT submit packet:
  3043. Offset    Size    Description    (Table 1841)
  3044.  00h    BYTE    level (must be 00h)
  3045.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  3046.  
  3047. (Table 1842)
  3048. Values for PRINT error code:
  3049.  0001h    invalid function
  3050.  0002h    file not found
  3051.  0003h    path not found
  3052.  0004h    out of file handles
  3053.  0005h    access denied
  3054.  0008h    print queue full
  3055.  0009h    spooler busy
  3056.  000Ch    name too long
  3057.  000Fh    invalid drive
  3058. --------c-2F0101SI20D6-----------------------
  3059. INT 2F U - PrintCache v3.1 PRINT.COM - SUBMIT FILE FOR PRINTING
  3060.     AX = 0101h
  3061.     SI = 20D6h
  3062.     DI = 8761h
  3063.     DS:DX -> submit packet (see #1841)
  3064.     CL = print options
  3065.         bit 4: use default options
  3066. Return: CF clear if successful
  3067.         AL = status
  3068.         01h added to queue
  3069.         9Eh now printing
  3070.     CF set on error
  3071.         AX = error code (see #1842)
  3072. Program: PrintCache PRINT.COM is a DOS PRINT replacement included in
  3073.       LaserTools' PrintCache memory/disk-based print spooler package
  3074. Note:    if either SI or DI differs from the indicated magic values on entry,
  3075.       PrintCache will use the default print options for the file for
  3076.       compatibility with DOS PRINT
  3077. SeeAlso: AX=0100h/SI=20D6h,AX=0101h,AX=0107h"PrintCache"
  3078. --------c-2F0102-----------------------------
  3079. INT 2F - DOS 3.0+ PRINT - REMOVE FILE FROM PRINT QUEUE
  3080.     AX = 0102h
  3081.     DS:DX -> ASCIZ filename (wildcards allowed)
  3082. Return: CF clear if successful
  3083.     CF set on error
  3084.         AX = error code (see #1842)
  3085. SeeAlso: AX=0101h,AX=0103h
  3086. --------c-2F0103-----------------------------
  3087. INT 2F - DOS 3.0+ PRINT - CANCEL ALL FILES IN PRINT QUEUE
  3088.     AX = 0103h
  3089. Return: CF clear if successful
  3090.     CF set on error
  3091.         AX = error code (see #1842)
  3092. SeeAlso: AX=0102h
  3093. --------c-2F0104-----------------------------
  3094. INT 2F - DOS 3.0+ PRINT - FREEZE PRINT QUEUE TO READ JOB STATUS
  3095.     AX = 0104h
  3096. Return: CF clear if successful
  3097.         DX = error count since status last read
  3098.         DS:SI -> print queue
  3099.     CF set on error
  3100.         AX = error code (see #1842)
  3101. Desc:    get the list of print jobs, temporarily suspending PRINT's activities
  3102.       to avoid changing the list while it is being examined
  3103. Notes:    the print queue is an array of 64-byte ASCIZ filenames terminated by
  3104.       an empty filename; the first name is the file currently being printed
  3105.     printing is stopped until AX=0105h is called to prevent the queue
  3106.       from changing while the filenames are being read
  3107. SeeAlso: AX=0101h,AX=0105h
  3108. --------c-2F0105-----------------------------
  3109. INT 2F - DOS 3.0+ PRINT - RESTART PRINT QUEUE AFTER STATUS READ
  3110.     AX = 0105h
  3111. Return: CF clear if successful
  3112.     CF set on error
  3113.         AX = error code (see #1842)
  3114. Desc:    restart PRINT's activities once an application finishes examining the
  3115.       print queue
  3116. SeeAlso: AX=0104h
  3117. --------c-2F0106-----------------------------
  3118. INT 2F - DOS 3.3+ PRINT - GET PRINTER DEVICE
  3119.     AX = 0106h
  3120. Return: CF set if files in print queue
  3121.         AX = error code 0008h (queue full)
  3122.         DS:SI -> device driver header
  3123.     CF clear if print queue empty
  3124.         AX = 0000h
  3125. Desc:    determine which device, if any, PRINT is currently using for output
  3126. Notes:    undocumented prior to the release of MS-DOS 5.0
  3127.     this function can be used to allow a program to avoid printing to the
  3128.       printer on which PRINT is currently performing output
  3129. SeeAlso: AX=0104h
  3130. --------c-2F0107-----------------------------
  3131. INT 2F U - PrintCache v3.1 PRINT.COM - SET TRAILING FORM FEEDS
  3132.     AX = 0107h
  3133.     CL bit 0: output form feed between print jobs
  3134. Return: AL destroyed
  3135. SeeAlso: AX=0100h/SI=20D6h,AX=0101h/SI=20D6h
  3136. --------N-2F0200-----------------------------
  3137. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALLATION CHECK
  3138.     AX = 0200h
  3139. Return: AL = FFh if installed
  3140. Desc:    determine whether the PC LAN Program redirector is installed
  3141. SeeAlso: AX=0201h,AX=0203h
  3142. --------N-2F0201-----------------------------
  3143. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  3144.     AX = 0201h
  3145. Return: nothing???
  3146. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  3147.     AX=0202h appears to be the opposite function
  3148.     these functions are supposedly used to signal opening and closing of
  3149.       printers
  3150. SeeAlso: AX=0202h
  3151. --------N-2F0202-----------------------------
  3152. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  3153.     AX = 0202h
  3154.     ???
  3155. Return: nothing???
  3156. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  3157.     these functions are supposedly used to signal opening and closing of
  3158.       printers
  3159. SeeAlso: AX=0201h
  3160. --------N-2F0203-----------------------------
  3161. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  3162.     AX = 0203h
  3163. Return: nothing???
  3164. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  3165.     AX=0204h appears to be the opposite function
  3166.     these functions are supposedly used to signal opening and closing of
  3167.       printers
  3168. SeeAlso: AX=0200h,AX=0204h
  3169. --------N-2F0204-----------------------------
  3170. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  3171.     AX = 0204h
  3172.     ???
  3173. Return: nothing???
  3174. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  3175.     AX=0203h appears to be the opposite function
  3176.     these functions are supposedly used to signal opening and closing of
  3177.       printers
  3178. SeeAlso: AX=0200h,AX=0203h
  3179. --------N-2F---------------------------------
  3180. INT 2F U - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  3181.     AX = 02xxh
  3182.     ???
  3183. Return: ???
  3184. --------l-2F0500-----------------------------
  3185. INT 2F U - DOS 3.0+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  3186.     AX = 0500h
  3187. Return: AL = 00h not installed, OK to install
  3188.          01h not installed, can't install
  3189.          FFh installed
  3190. Desc:    determine whether a critical error message override is installed
  3191. Note:    this set of functions allows a user program to partially or completely
  3192.       override the default critical error handler's message in COMMAND.COM
  3193. SeeAlso: AH=05h,INT 24
  3194. --------l-2F05-------------------------------
  3195. INT 2F CU - DOS 3.0+ CRITICAL ERROR HANDLER - EXPAND ERROR INTO STRING
  3196.     AH = 05h
  3197. ---DOS 3.x---
  3198.     AL = extended error code (not zero)
  3199. ---DOS 4.0+ ---
  3200.     AL = error type
  3201.         01h DOS extended error code
  3202.         02h parameter error
  3203.     BX = error code
  3204. Return: CF clear if successful
  3205.         ES:DI -> ASCIZ error message (read-only)
  3206.         AL = completion state
  3207.         00h message requires completion with device name, drive, etc.
  3208.         01h message is complete as returned
  3209.     CF set if error code can't be converted to string
  3210.         AX,DI,ES destroyed
  3211.     other flags corrupted
  3212. Notes:    called at start of COMMAND.COM's default critical error handler if
  3213.       installed by a user program, allowing partial or complete overriding
  3214.       of the default error messages
  3215.     subfunction 02h is called by many DOS 4 external programs
  3216.     DR DOS's COMMAND.COM appends additional info ("0 files copied") to the
  3217.       returned string
  3218. SeeAlso: AX=0500h,AX=122Eh,INT 24
  3219. --------U-2F0600-----------------------------
  3220. INT 2F - DOS 3.0+ ASSIGN - INSTALLATION CHECK
  3221.     AX = 0600h
  3222. Return: AL = status
  3223.         00h not installed
  3224.         01h not installed, but not OK to install
  3225.         FFh installed
  3226. Notes:    ASSIGN is not a TSR in DR DOS 5.0; it is internally replaced by SUBST
  3227.       (see INT 21/AH=52h)
  3228.     undocumented prior to the release of DOS 5.0
  3229. SeeAlso: AX=0601h,INT 21/AH=52h
  3230. --------U-2F0601-----------------------------
  3231. INT 2F U - DOS 3.0+ ASSIGN - GET DRIVE ASSIGNMENT TABLE
  3232.     AX = 0601h
  3233. Return: ES = segment of ASSIGN work area and assignment table
  3234. Note:    the 26 bytes starting at ES:0103h specify which drive each of A: to Z:
  3235.       is mapped to.     Initially set to 01h 02h 03h....
  3236. SeeAlso: AX=0600h,AX=AF14h"WinDOS"
  3237. --------D-2F0800-----------------------------
  3238. INT 2F U - DRIVER.SYS support - INSTALLATION CHECK
  3239.     AX = 0800h
  3240. Return: AL = status
  3241.         00h not installed, OK to install
  3242.         01h not installed, not OK to install
  3243.         FFh installed
  3244. Desc:    determine whether the internal support code used by DRIVER.SYS is
  3245.       present; it is always present in DOS 3.2+
  3246. Note:    supported by DR DOS 5.0
  3247. --------D-2F0801-----------------------------
  3248. INT 2F U - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  3249.     AX = 0801h
  3250.     DS:DI -> drive data table (see #1849,#1850,#1851)
  3251. Return: AX,BX,SI,ES destroyed
  3252. Notes:    moves down internal list of drive data tables, copying and modifying
  3253.       the drive description flags word for tables referencing same physical
  3254.       drive
  3255.     the data table is appended to the chain of tables
  3256.     supported by DR DOS 5.0
  3257. SeeAlso: AX=0803h
  3258. --------D-2F0802-----------------------------
  3259. INT 2F U - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  3260.     AX = 0802h
  3261.     ES:BX -> device driver request header (see #1845)
  3262. Return: request header updated as per requested operation
  3263. Notes:    supported by DR DOS 5.0
  3264.     DOS 3.2 executes this function on any AL value from 02h through F7h;
  3265.       DOS 4.0+ executes this function on AL=02h and AL=04h-F7h
  3266.     the command codes (see #1843) and structures described below apply
  3267.       to all drivers which support the appropriate commands; this call is
  3268.       just one of a number of ways in which a device driver request may
  3269.       be invoked
  3270.     this call reportedly leaves one word on the stack under MS-DOS 6.2,
  3271.       so the stack pointer should be saved and restored around the call
  3272.       to this function
  3273. SeeAlso: AX=0800h,AX=0801h,AX=0803h,INT 21/AH=52h,INT 21/AH=99h,INT 21/AH=9Ah
  3274.  
  3275. (Table 1843)
  3276. Values for device driver command code:
  3277.  00h    INIT
  3278.  01h    MEDIA CHECK (block devices)
  3279.  02h    BUILD BPB (block devices)
  3280.  03h    IOCTL INPUT
  3281.  04h    INPUT
  3282.  05h    NONDESTRUCTIVE INPUT, NO WAIT (character devices)
  3283.  06h    INPUT STATUS (character devices)
  3284.  07h    INPUT FLUSH (character devices)
  3285.  08h    OUTPUT
  3286.  09h    OUTPUT WITH VERIFY
  3287.  0Ah    OUTPUT STATUS (character devices)
  3288.  0Bh    OUTPUT FLUSH (character devices)
  3289.  0Ch    IOCTL OUTPUT
  3290.  0Dh    (DOS 3.0+) DEVICE OPEN
  3291.  0Eh    (DOS 3.0+) DEVICE CLOSE
  3292.  0Fh    (DOS 3.0+) REMOVABLE MEDIA (block devices)
  3293.  10h    (DOS 3.0+) OUTPUT UNTIL BUSY (character devices)
  3294.  11h    (European MS-DOS 4.0) STOP OUTPUT (console screen drivers only)
  3295.  12h    (European MS-DOS 4.0) RESTART OUTPUT (console screen drivers only)
  3296.  13h    (DOS 3.2+) GENERIC IOCTL
  3297.  14h    unused
  3298.  15h    (European MS-DOS 4.0) RESET UNCERTAIN MEDIA FLAG
  3299.  16h    unused
  3300.  17h    (DOS 3.2+) GET LOGICAL DEVICE
  3301.  18h    (DOS 3.2+) SET LOGICAL DEVICE
  3302.  19h    (DOS 5.0+) CHECK GENERIC IOCTL SUPPORT
  3303.  80h    (CD-ROM) READ LONG
  3304.  81h    (CD-ROM) reserved
  3305.  82h    (CD-ROM) READ LONG PREFETCH
  3306.  83h    (CD-ROM) SEEK
  3307.  84h    (CD-ROM) PLAY AUDIO
  3308.  85h    (CD-ROM) STOP AUDIO
  3309.  86h    (CD-ROM) WRITE LONG
  3310.  87h    (CD-ROM) WRITE LONG VERIFY
  3311.  88h    (CD-ROM) RESUME AUDIO
  3312.  
  3313. Bitfields for device request status:
  3314. Bit(s)    Description    (Table 1844)
  3315.  15    error
  3316.  14-11    reserved
  3317.  10    ??? set by DOS kernel on entry to some driver calls
  3318.  9    busy
  3319.  8    done (may be clear on return under European MS-DOS 4.0)
  3320.  7-0    error code if bit 15 set (see #1846)
  3321.  
  3322. Format of device driver request header:
  3323. Offset    Size    Description    (Table 1845)
  3324.  00h    BYTE    length of request header
  3325.  01h    BYTE    subunit within device driver
  3326.  02h    BYTE    command code (see #1843)
  3327.  03h    WORD    status (filled in by device driver) (see #1844)
  3328. ---DOS---
  3329.  05h  4 BYTEs    reserved (unused in DOS 2.x and 3.x)
  3330.  09h    DWORD    (European MS-DOS 4.0 only) pointer to next request header in
  3331.               device's request queue
  3332.         (other versions) reserved (unused in DOS 2.x and 3.x)
  3333. ---STARLITE architecture---
  3334.  05h    DWORD    pointer to next request header
  3335.  09h  4 BYTEs    reserved
  3336. ---command code 00h---
  3337.  0Dh    BYTE    (ret) number of units
  3338.  0Eh    DWORD    (call) pointer to DOS device helper function (see #1847)
  3339.               (European MS-DOS 4.0 only)
  3340.         (call) pointer past end of memory available to driver (DOS 5+)
  3341.         (ret) address of first free byte following driver
  3342.  12h    DWORD    (call) pointer to commandline arguments
  3343.         (ret) pointer to BPB array (block drivers) or
  3344.               0000h:0000h (character drivers)
  3345.  16h    BYTE    (DOS 3.0+) drive number for first unit of block driver (0=A)
  3346.    ---European MS-DOS 4.0---
  3347.  17h    DWORD    pointer to function to save registers on stack
  3348.    ---DOS 5+ ---
  3349.  17h    WORD    (ret) error-message flag
  3350.         0001h MS-DOS should display error msg on init failure
  3351. ---command code 01h---
  3352.  0Dh    BYTE    media descriptor
  3353.  0Eh    BYTE    (ret) media status
  3354.         00h don't know
  3355.         01h media has not changed
  3356.         FFh media has been changed
  3357.  0Fh    DWORD    (ret, DOS 3.0+) pointer to previous volume ID if the
  3358.           OPEN/CLOSE/RM bit in device header is set and disk changed
  3359. ---command code 02h---
  3360.  0Dh    BYTE    media descriptor
  3361.  0Eh    DWORD    transfer address
  3362.         -> scratch sector if NON-IBM FORMAT bit in device header set
  3363.         -> first FAT sector otherwise
  3364.  12h    DWORD    pointer to BPB (set by driver) (see #0950 at INT 21/AH=53h)
  3365. ---command codes 03h,0Ch--- (see also INT 21/AX=4402h,INT 21/AX=4403h)
  3366.  0Dh    BYTE    media descriptor (block devices only)
  3367.  0Eh    DWORD    transfer address
  3368.  12h    WORD    (call) number of bytes to read/write
  3369.         (ret) actual number of bytes read or written
  3370. ---command codes 04h,08h,09h (except Compaq DOS 3.31, DR DOS 6)---
  3371.  0Dh    BYTE    media descriptor (block devices only)
  3372.  0Eh    DWORD    transfer address
  3373.  12h    WORD    byte count (character devices) or sector count (block devices)
  3374.  14h    WORD    starting sector number (block devices only)
  3375.  16h    DWORD    (DOS 3.0+) pointer to volume ID if error 0Fh returned
  3376.  1Ah    DWORD    (DOS 4.0+) 32-bit starting sector number (block devices with
  3377.           device attribute word bit 1 set only) if starting sector
  3378.           number above is FFFFh (see INT 21/AH=52h)
  3379. ---command codes 04h,08h,09h (Compaq DOS 3.31, DR DOS 6)---
  3380.  0Dh    BYTE    media descriptor (block devices only)
  3381.  0Eh    DWORD    transfer address
  3382.  12h    WORD    byte count (character devices) or sector count (block devices)
  3383.  14h    DWORD    32-bit starting sector number (block devices only)
  3384.     Note:    to reliably determine which variant of the request block for
  3385.           functions 04h,08h,09h has been passed to the driver, check
  3386.           the length field as well as the word at offset 14h.  If the
  3387.           length is 1Eh and 14h=FFFFh, use the DWORD at 1Ah as the
  3388.           starting sector number; if the length is 18h, use the DWORD
  3389.           at 14h; otherwise, use the WORD at 14h.
  3390. ---command code 05h---
  3391.  0Dh    BYTE    byte read from device if BUSY bit clear on return
  3392. ---command codes 06h,07h,0Ah,0Bh,0Dh,0Eh,0Fh---
  3393.  no further fields
  3394. ---command code 10h---
  3395.  0Dh    BYTE    unused
  3396.  0Eh    DWORD    transfer address
  3397.  12h    WORD    (call) number of bytes to write
  3398.         (ret) actual number of bytes written
  3399. ---command codes 11h,12h---
  3400.  0Dh    BYTE    reserved
  3401. ---command code 15h---
  3402.  no further fields
  3403. ---command codes 13h,19h---
  3404.  0Dh    BYTE    category code
  3405.         00h unknown
  3406.         01h COMn:
  3407.         03h CON
  3408.         05h LPTn:
  3409.         07h mouse (European MS-DOS 4.0)
  3410.         08h disk
  3411.         9Eh (STARLITE) Media Access Control driver
  3412.  0Eh    BYTE    function code
  3413.         00h (STARLITE) MAC Bind request
  3414.  0Fh    WORD    copy of DS at time of IOCTL call (apparently unused in DOS 3.3)
  3415.         SI contents (European MS-DOS 4.0)
  3416.  11h    WORD    offset of device driver header
  3417.         DI contents (European MS-DOS 4.0)
  3418.  13h    DWORD    pointer to parameter block from INT 21/AX=440Ch or AX=440Dh
  3419. ---command codes 80h,82h---
  3420.  0Dh    BYTE    addressing mode
  3421.         00h HSG (default)
  3422.         01h Phillips/Sony Red Book
  3423.  0Eh    DWORD    transfer address (ignored for command 82h)
  3424.  12h    WORD    number of sectors to read
  3425.         (if 0 for command 82h, request is an advisory seek)
  3426.  14h    DWORD    starting sector number
  3427.         logical sector number in HSG mode
  3428.         frame/second/minute/unused in Red Book mode
  3429.         (HSG sector = minute * 4500 + second * 75 + frame - 150)
  3430.  18h    BYTE    data read mode
  3431.         00h cooked (2048 bytes per frame)
  3432.         01h raw (2352 bytes per frame, including EDC/ECC)
  3433.  19h    BYTE    interleave size (number of sectors stored consecutively)
  3434.  1Ah    BYTE    interleave skip factor
  3435.         (number of sectors between consecutive portions)
  3436. ---command code 83h---
  3437.  0Dh    BYTE    addressing mode (see above)
  3438.  0Eh    DWORD    transfer address (ignored)
  3439.  12h    WORD    number of sectors to read (ignored)
  3440.  14h    DWORD    starting sector number (see also above)
  3441. ---command code 84h---
  3442.  0Dh    BYTE    addressing mode (see above)
  3443.  0Eh    DWORD    starting sector number (see also above)
  3444.  12h    DWORD    number of sectors to play
  3445. ---command codes 85h,88h---
  3446.  no further fields
  3447. ---command codes 86h,87h---
  3448.  0Dh    BYTE    addressing mode (see above)
  3449.  0Eh    DWORD    transfer address (ignored in write mode 0)
  3450.  12h    WORD    number of sectors to write
  3451.  14h    DWORD    starting sector number (see also above)
  3452.  18h    BYTE    write mode
  3453.         00h mode 0 (write all zeros)
  3454.         01h mode 1 (default) (2048 bytes per sector)
  3455.         02h mode 2 form 1 (2048 bytes per sector)
  3456.         03h mode 2 form 2 (2336 bytes per sector)
  3457.  19h    BYTE    interleave size (number of sectors stored consecutively)
  3458.  1Ah    BYTE    interleave skip factor
  3459.         (number of sectors between consecutive portions)
  3460.  
  3461. (Table 1846)
  3462. Values for device driver error code:
  3463.  00h    write-protect violation
  3464.  01h    unknown unit
  3465.  02h    drive not ready
  3466.  03h    unknown command
  3467.  04h    CRC error
  3468.  05h    bad drive request structure length
  3469.  06h    seek error
  3470.  07h    unknown media
  3471.  08h    sector not found
  3472.  09h    printer out of paper
  3473.  0Ah    write fault
  3474.  0Bh    read fault
  3475.  0Ch    general failure
  3476.  0Dh    reserved
  3477.  0Eh    (CD-ROM) media unavailable
  3478.  0Fh    invalid disk change
  3479.  
  3480. (Table 1847)
  3481. Call European MS-DOS 4.0 device helper function with:
  3482.     DL = function
  3483.         00h "SchedClock" called on each timer tick
  3484.         AL = tick interval in milliseconds
  3485.         01h "DevDone" device I/O complete
  3486.         ES:BX -> request header
  3487.         Note:    must update status word first; may be called from
  3488.               an interrupt handler
  3489.         02h "PullRequest" pull next request from queue
  3490.         DS:SI -> DWORD pointer to start of device's request queue
  3491.         Return: ZF clear if pending request
  3492.                 ES:BX -> request header
  3493.             ZF set if no more requests
  3494.         03h "PullParticular" remove specific request from queue
  3495.         DS:SI -> DWORD pointer to start of device's request queue
  3496.         ES:BX -> request header
  3497.         Return: ZF set if request header not found
  3498.         04h "PushRequest" push the request onto the queue
  3499.         DS:SI -> DWORD pointer to start of device's request queue
  3500.         ES:BX -> request header
  3501.         interrupts disabled
  3502.         05h "ConsInputFilter" keyboard input check
  3503.         AX = character (high byte 00h if PC ASCII character)
  3504.         Return: ZF set if character should be discarded
  3505.             ZF clear if character should be handled normally
  3506.         Note:    called by keyboard interrupt handler so DOS can scan
  3507.               for special input characters
  3508.         06h "SortRequest" push request in sorted order by starting sector
  3509.         DS:SI -> DWORD pointer to start of device's request queue
  3510.         ES:BX -> request header
  3511.         interrupts disabled
  3512.         07h "SigEvent" send signal on keyboard event
  3513.         AH = event identifier
  3514.         Return: AL,FLAGS destroyed
  3515.         09h "ProcBlock" block on event
  3516.         AX:BX = event identifier (typically a pointer)
  3517.         CX = timeout in ms or 0000h for never
  3518.         DH = interruptable flag (nonzero if pause may be interrupted)
  3519.         interrupts disabled
  3520.         Return: after corresponding ProcRun call
  3521.             CF clear if event wakeup, set if unusual wakeup
  3522.             ZF set if timeout wakeup, clear if interrupted
  3523.             AL = wakeup code, nonzero if unusual wakeup
  3524.             interrupts enabled
  3525.             BX,CX,DX destroyed
  3526.         Note:    block process and schedules another to run
  3527.         0Ah "ProcRun" unblock process
  3528.         AX:BX = event identifier (typically a pointer)
  3529.         Return: AX = number of processes awakened
  3530.             ZF set if no processes awakened
  3531.             BX,CX,DX destroyed
  3532.         0Bh "QueueInit" initialize/clear character queue
  3533.         DS:BX -> character queue structure (see #1848)
  3534.         Note:    the queue size field must be set before calling
  3535.         0Dh "QueueWrite" put a character in the queue
  3536.         DS:BX -> character queue (see #1848)
  3537.         AL = character to append to end of queue
  3538.         Return: ZF set if queue is full
  3539.             ZF clear if character stored
  3540.         0Eh "QueueRead" get a character from the queue
  3541.         DS:BX -> character queue (see #1848)
  3542.         Return: ZF set if queue is empty
  3543.             ZF clear if characters in queue
  3544.                 AL = first character in queue
  3545.         10h "GetDOSVar" return pointer to DOS variable
  3546.         AL = index of variable
  3547.             03h current process ID
  3548.         BX = index into variable if AL specifies an array
  3549.         CX = expected length of variable
  3550.         Return: CF clear if successful
  3551.                 DX:AX -> variable
  3552.             CF set on error
  3553.                 AX,DX destroyed
  3554.             BX,CX destroyed
  3555.         Note:    the variables may not be modified
  3556.         14h "Yield" yield CPU if higher-priority task ready to run
  3557.         Return: FLAGS destroyed
  3558.         1Bh "CritEnter" begin system critical section
  3559.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  3560.         Return: AX,BX,CX,DX destroyed
  3561.         1Ch "CritLeave" end system critical section
  3562.         DS:BX -> semaphore (6 BYTEs, initialized to zero)
  3563.         Return: AX,BX,CX,DX destroyed
  3564.         Note:    must be called in the context of the process which
  3565.               called CritEnter on the semaphore
  3566. Note:    the DWORD pointing at the request queue must be allocated by the driver
  3567.       and initialized to 0000h:0000h.  It always points at the next request
  3568.       to be executed
  3569.  
  3570. Format of European MS-DOS 4.0 character queue:
  3571. Offset    Size    Description    (Table 1848)
  3572.  00h    WORD    size of queue in bytes
  3573.  02h    WORD    index of next character out
  3574.  04h    WORD    count of characters in the queue
  3575.  06h  N BYTEs    queue buffer
  3576. --------D-2F0803-----------------------------
  3577. INT 2F U - DOS 4.0+ DRIVER.SYS support - GET DRIVE DATA TABLE LIST
  3578.     AX = 0803h
  3579. Return: DS:DI -> first drive data table in list (see #1849,#1850,#1851)
  3580. Note:    not available under DR DOS 5.0
  3581. SeeAlso: AX=0801h
  3582.  
  3583. Format of DOS 3.30 drive data table:
  3584. Offset    Size    Description    (Table 1849)
  3585.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  3586.  04h    BYTE    physical unit number (for INT 13)
  3587.  05h    BYTE    logical drive number (0=A:)
  3588.  06h 19 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  3589.         Offset    Size    Description
  3590.          00h    WORD    bytes per sector
  3591.          02h    BYTE    sectors per cluster, FFh if unknown
  3592.          03h    WORD    number of reserved sectors
  3593.          05h    BYTE    number of FATs
  3594.          06h    WORD    number of root dir entries
  3595.          08h    WORD    total sectors
  3596.          0Ah    BYTE    media descriptor, 00h if unknown
  3597.          0Bh    WORD    sectors per FAT
  3598.          0Dh    WORD    sectors per track
  3599.          0Fh    WORD    number of heads
  3600.          11h    WORD    number of hidden sectors
  3601.  19h    BYTE    flags
  3602.         bit 6: 16-bit FAT instead of 12-bit FAT
  3603.  1Ah    WORD    number of DEVICE OPEN calls without corresponding DEVICE CLOSE
  3604.  1Ch 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  3605.           fixed media)
  3606.  27h    BYTE    terminating null for volume label???
  3607.  28h    BYTE    device type (see #0855 at INT 21/AX=440Dh)
  3608.  29h    WORD    bit flags describing drive (see #1852)
  3609.  2Bh    WORD    number of cylinders
  3610.  2Dh 19 BYTEs    BIOS Parameter Block for highest capacity supported
  3611.  40h  3 BYTEs    ???
  3612.  43h  9 BYTEs    filesystem type???, default = "NO NAME    "
  3613.         (apparently only MS-DOS 3.30 fixed media, nulls for removable
  3614.           media and PC-DOS 3.30)
  3615.  4Ch    BYTE    least-significant byte of last-accessed cylinder number
  3616. ---removable media---
  3617.  4Dh    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3618. ---fixed media---
  3619.  4Dh    WORD    partition (FFFFh = primary, 0001h = extended)
  3620.  4Fh    WORD    absolute cylinder number of partition's start on physical
  3621.           drive (always FFFFh if primary partition)
  3622. SeeAlso: #1850,#1851
  3623.  
  3624. Format of COMPAQ DOS 3.31 drive data table:
  3625. Offset    Size    Description    (Table 1850)
  3626.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  3627.  04h    BYTE    physical unit number (for INT 13)
  3628.  05h    BYTE    logical drive number (0=A:)
  3629.  06h 25 BYTEs    BIOS Parameter Block (see DOS 4.0-6.0 drive data table below)
  3630.  1Fh  6 BYTEs    reserved fields from BPB above???
  3631.  25h    BYTE    flags
  3632.         bit 6: 16-bit FAT instead of 12-bit FAT
  3633.         bit 5: large volume???
  3634.  26h    WORD    device-open count???
  3635.  28h 11 BYTEs    volume label or "NO NAME    " if none (always "NO NAME" for
  3636.           fixed media)
  3637.  33h    BYTE    terminating null for volume label
  3638.  34h    BYTE    device type (see #0855 at INT 21/AX=440Dh)
  3639.  35h    WORD    bit flags describing drive (see #1852)
  3640.  37h    WORD    number of cylinders
  3641.  39h 25 BYTEs    BIOS parameter block for highest capacity drive supports
  3642.  52h  6 BYTEs    ??? apparently always zeros
  3643.  58h    BYTE    least-significant byte of last-accessed cylinder number
  3644. ---removable media---
  3645.  59h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3646. ---fixed media---
  3647.  59h    WORD    partition (FFFFh = primary, 0001h = extended)
  3648.  5Bh    WORD    absolute cylinder number of partition's start on physical
  3649.           drive (always FFFFh if primary partition)
  3650. SeeAlso: #1849,#1851
  3651.  
  3652. Format of DOS 4.0-6.0 drive data table:
  3653. Offset    Size    Description    (Table 1851)
  3654.  00h    DWORD    pointer to next table (offset FFFFh if last table)
  3655.  04h    BYTE    physical unit number (for INT 13)
  3656.  05h    BYTE    logical drive number (0=A:)
  3657.  06h 25 BYTEs    BIOS Parameter Block (see also INT 21/AH=53h)
  3658.         Offset    Size    Description
  3659.          00h    WORD    bytes per sector
  3660.          02h    BYTE    sectors per cluster, FFh if unknown
  3661.          03h    WORD    number of reserved sectors
  3662.          05h    BYTE    number of FATs
  3663.          06h    WORD    number of root dir entries
  3664.          08h    WORD    total sectors (see offset 15h if zero)
  3665.          0Ah    BYTE    media descriptor, 00h if unknown
  3666.          0Bh    WORD    sectors per FAT
  3667.          0Dh    WORD    sectors per track
  3668.          0Fh    WORD    number of heads
  3669.          11h    DWORD    number of hidden sectors
  3670.          15h    DWORD    total sectors if WORD at 08h is zero
  3671.  1Fh    BYTE    flags
  3672.         bit 6: 16-bit FAT instead of 12-bit
  3673.         bit 7: unsupportable disk (all accesses will return Not Ready)
  3674.  20h    WORD    device-open count
  3675.  22h    BYTE    device type (see #0855 at INT 21/AX=440Dh)
  3676.  23h    WORD    bit flags describing drive (see #1852)
  3677.  25h    WORD    number of cylinders (for partition only, if hard disk)
  3678.  27h 25 BYTEs    BIOS Parameter Block for default (highest) capacity supported
  3679.  40h  6 BYTEs    reserved (part of BPB above)
  3680.  46h    BYTE    last track accessed
  3681. ---removable media---
  3682.  47h    DWORD    time of last access in clock ticks (FFFFFFFFh if never)
  3683. ---fixed media---
  3684.  47h    WORD    partition (FFFFh = primary, 0001h = extended)
  3685.         always 0001h for DOS 5+
  3686.  49h    WORD    absolute cylinder number of partition's start on physical drive
  3687.         (FFFFh if primary partition in DOS 4.x)
  3688. ------
  3689.  4Bh 11 BYTEs    volume label or "NO NAME    " if none (apparently taken from
  3690.           extended boot record rather than root directory)
  3691.  56h    BYTE    terminating null for volume label
  3692.  57h    DWORD    serial number
  3693.  5Bh  8 BYTEs    filesystem type ("FAT12      " or "FAT16    ")
  3694.  63h    BYTE    terminating null for filesystem type
  3695. SeeAlso: #1849,#1850
  3696.  
  3697. Bitfields for flags describing drive:
  3698. Bit(s)    Description    (Table 1852)
  3699.  0    fixed media
  3700.  1    door lock ("changeline") supported
  3701.  2    current BPB locked
  3702.  3    all sectors in a track are the same size
  3703.  4    physical drive has multiple logical units
  3704.  5    current logical drive for shared physical drive
  3705.  6    disk change detected
  3706.  7    device parameters were changed (set DASD before formatting)
  3707.     (see #0854 at INT 21/AX=440Dh)
  3708.  8    disk reformatted (BPB of current media was changed)
  3709.  9    access flag (fixed media only, disables reads and writes)
  3710.     (see #0860 at INT 21/AX=440Dh)
  3711. --------f-2F1000-----------------------------
  3712. INT 2F - SHARE - INSTALLATION CHECK
  3713.     AX = 1000h
  3714. Return: AL = status
  3715.         00h not installed, OK to install
  3716.         01h not installed, not OK to install
  3717.         FFh installed
  3718. BUGS:    values of AL other than 00h put DOS 3.x SHARE into an infinite loop
  3719.       (08E9: OR  AL,AL
  3720.        08EB: JNZ 08EB) <- the buggy instruction (DOS 3.3)
  3721.     values of AL other than described here put PC-DOS 4.00 into the same
  3722.       loop (the buggy instructions are the same)
  3723. Notes:    supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  3724.     if DOS 4.01 SHARE was automatically loaded, file sharing is in an
  3725.       inactive state (due to the undocumented /NC flag used by the autoload
  3726.       code) until this call is made
  3727.     DOS 5+ chains to the previous handler if AL <> 00h on entry
  3728.     Windows Enhanced mode hooks this call and reports that SHARE is
  3729.       installed even when it is not
  3730. SeeAlso: AX=1080h,INT 21/AH=52h
  3731. --------d-2F1001-----------------------------
  3732. INT 2F U - DR DOS 6.0 SHARE internal - SET ???
  3733.     AX = 1001h
  3734.     DX:BX -> ???function
  3735. Notes:    this function is also supported by SuperStor, a disk-compression
  3736.       program by Addstor which is bundled with DR DOS 6.0, and the
  3737.       Novell DOS 7 DELWATCH.EXE
  3738.     the default handler for the pointer set by this call under DELWATCH
  3739.       simply returns with CF set
  3740. SeeAlso: AX=1000h,AX=F800h
  3741. --------f-2F1040-----------------------------
  3742. INT 2F U - DOS 4 only SHARE internal - ???
  3743.     AX = 1040h
  3744.     ???
  3745. Return: AL = FFh???
  3746. SeeAlso: AX=1000h
  3747. --------f-2F1080-----------------------------
  3748. INT 2F U - DOS 4 only SHARE internal - TURN ON FILE SHARING CHECKS
  3749.     AX = 1080h
  3750. Return: AL = status
  3751.         F0h successful
  3752.         FFh checking was already on
  3753. Note:    DOS 4.x SHARE has dual functions: FCB support for large (>32M) media
  3754.       and file sharing checks.  The undocumented commandline flag /NC can
  3755.       be used to disable the sharing code.
  3756. SeeAlso: AX=1000h,AX=1081h
  3757. --------f-2F1081-----------------------------
  3758. INT 2F U - DOS 4 only SHARE internal - TURN OFF FILE SHARING CHECKS
  3759.     AX = 1081h
  3760. Return: AL = status
  3761.         F0h successful
  3762.         FFh checking was already off
  3763. Note:    (see AX=1080h)
  3764. SeeAlso: AX=1000h,AX=1080h
  3765. --------O-2F10FE-----------------------------
  3766. INT 2F U - Novell DOS 7 DELWATCH.EXE - INSTALLATION CHECK
  3767.     AX = 10FEh
  3768. Return: AX = 20FFh if installed and active
  3769.         DX:BX -> private entry point (see #1853)
  3770.  
  3771. (Table 1853)
  3772. Call DELWATCH private entry point with:
  3773.     AH = function
  3774.         00h NOP???
  3775.         Return: AX = 0000h
  3776.             CX = 0004h (unsupported function)
  3777.         01h disable DELWATCH on drive
  3778.         AL = drive number (00h = A:)
  3779.         Return: AX = status (0000h if failed, FFFFh if successful)
  3780.         02h ???
  3781.         AL = drive number (00h = A:)
  3782.         ???
  3783.         Return: ???
  3784.         03h    ???
  3785.         AL = drive number (00h = A:)
  3786.         CX = ??? (0000h/0001h)
  3787.         ???
  3788.         Return: ???
  3789.         04h ???
  3790.         AL = drive number (00h = A:)
  3791.         ???
  3792.         Return: ???
  3793.         05h ???
  3794.         AL = drive number (00h = A:)
  3795.         ???
  3796.         Return: ???
  3797.         06h enable DELWATCH on drive
  3798.         AL = drive number with bit 7 set (80h = A:, etc.)
  3799.         BX = maximum files of same name in one directory to save
  3800.         CX = maximum files to save on this disk
  3801.         ???
  3802.         Return: AX = status
  3803.                 0000h failed
  3804.                 FFFFh successful
  3805.             CX = error code on failure
  3806.                 (0004h if AL < 80h on entry)
  3807.         07h ???
  3808.         08h set file extensions list
  3809.         AL = sense (00h exclude named extensions, 01h only named ext.)
  3810.         DS:BX -> 31-byte ASCIZ extension list (three blank-padded bytes
  3811.               per extension)
  3812.         Return: AX = FFFFh (successful)
  3813.         09h    ???
  3814.         AL = drive number (00h = A:)
  3815.         ???
  3816.         Return: ???
  3817.         0Ah ???
  3818.         AL = drive number (00h = A:)
  3819.         ???
  3820.         Return: ???
  3821.         0Bh reset ???
  3822.         Return: AX = FFFFh (successful)
  3823.         see also function 0Dh
  3824.         0Ch check if drive enabled
  3825.         AL = drive number with bit 7 set (80h = A:, etc.)
  3826.         Return: AX = state
  3827.                 0000h disabled or error (check CX)
  3828.                 0001h drive enabled
  3829.             CX = error code (0004h invalid drive number)
  3830.         0Dh set ???
  3831.         BX = ???
  3832.         Return: AX = FFFFh (successful)
  3833.         see also function 0Bh
  3834.         0Eh ???
  3835.         AL = drive number (00h = A:)
  3836.         ???
  3837.         Return: ???
  3838. Return: AX = 0000h, CX = 0001h if DELWATCH busy
  3839.     registers unchanged if AH >= 0Fh on entry
  3840. --------O-2F10FF-----------------------------
  3841. INT 2F U - Multiplex - DR DOS 5.0 - ???
  3842.     AX = 10FFh
  3843.     ES:BX -> ???
  3844. Note:    sets pointer in kernel
  3845. --------N-2F1100-----------------------------
  3846. INT 2F C - NETWORK REDIRECTOR - INSTALLATION CHECK
  3847.     AX = 1100h
  3848. Return: AL = status
  3849.         00h not installed, OK to install
  3850.         01h not installed, not OK to install
  3851.         FFh installed
  3852.         AH = product identifier (ad hoc by various manufacturers)
  3853.             00h if PC Tools v8 DRIVEMAP
  3854.             42h ('B') for Beame&Whiteside BWNFS v3.0a
  3855.             6Eh ('n') for NetWare Lite v1.1 CLIENT
  3856. Notes:    this function is called by the DOS 3.1+ kernel
  3857.     in DOS 4.x only, the 11xx calls are all in IFSFUNC.EXE, not in the
  3858.       PC LAN Program redirector; DOS 5+ moves the calls back into the
  3859.       redirector
  3860.     the PC Network 1.00 redirector (renamed to PC LAN Program in 1.1-1.3)
  3861.       only supports AL=00h-27h
  3862. --------d-2F1100SFDADA-----------------------
  3863. INT 2F - MSCDEX (MS CD-ROM Extensions) - INSTALLATION CHECK
  3864.     AX = 1100h subfn DADAh
  3865.     STACK: WORD DADAh
  3866. Return: AL = status
  3867.         00h not installed, OK to install
  3868.         STACK unchanged
  3869.         01h not installed, not OK to install
  3870.         STACK unchanged
  3871.         FFh installed
  3872.         STACK: WORD    ADADh if MSCDEX installed
  3873.                 DADBh if Lotus CD/Networker installed
  3874. Note:    although MSCDEX sets the stack word to ADADh on return, any value other
  3875.       than DADAh is considered to mean that MSCDEX is already installed;
  3876.       Lotus CD/Networker v4+ uses this feature to fool MSCDEX into
  3877.       thinking it is already installed when it is in fact CD/Networker
  3878.       that is installed
  3879. Index:    installation check;Lotus CD/Networker
  3880. Index:    Lotus CD/Networker;installation check
  3881. --------N-2F1101-----------------------------
  3882. INT 2F CU - NETWORK REDIRECTOR - REMOVE REMOTE DIRECTORY
  3883.     AX = 1101h
  3884.     SS = DOS DS
  3885.     SDA first filename pointer -> fully-qualified directory name
  3886.     SDA CDS pointer -> current directory structure for drive with dir
  3887. Return: CF set on error
  3888.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  3889.     CF clear if successful
  3890. Note:    this function is called by the DOS 3.1+ kernel
  3891. SeeAlso: AX=1103h,AX=1105h,INT 21/AH=3Ah,INT 21/AH=60h
  3892. --------N-2F1102-----------------------------
  3893. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - REMOVE REMOTE DIRECTORY
  3894.     AX = 1102h
  3895.     SS = DOS DS
  3896.     SDA first filename pointer -> fully-qualified directory name
  3897.     SDA CDS pointer -> current directory structure for drive with dir
  3898. Return: CF set on error
  3899.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  3900.     CF clear if successful
  3901. Note:    appears to be identical to AX=1101h; MS internal documentation calls
  3902.       this function "SEQ_RMDIR"
  3903. SeeAlso: AX=1101h
  3904. --------N-2F1103-----------------------------
  3905. INT 2F CU - NETWORK REDIRECTOR - MAKE REMOTE DIRECTORY
  3906.     AX = 1103h
  3907.     SS = DOS DS
  3908.     SDA first filename pointer -> fully-qualified directory name
  3909.     SDA CDS pointer -> current directory structure for drive with dir
  3910. Return: CF set on error
  3911.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  3912.     CF clear if successful
  3913. Note:    this function is called by the DOS 3.1+ kernel
  3914. SeeAlso: AX=1101h,AX=1105h,INT 21/AH=39h,INT 21/AH=60h
  3915. --------N-2F1104-----------------------------
  3916. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - MAKE REMOTE DIRECTORY
  3917.     AX = 1104h
  3918.     SS = DOS DS
  3919.     SDA first filename pointer -> fully-qualified directory name
  3920.     SDA CDS pointer -> current directory structure for drive with dir
  3921. Return: CF set on error
  3922.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  3923.     CF clear if successful
  3924. Note:    appears to be identical to AX=1103h
  3925. SeeAlso: AX=1103h
  3926. --------N-2F1105-----------------------------
  3927. INT 2F CU - NETWORK REDIRECTOR - CHDIR
  3928.     AX = 1105h
  3929.     SS = DOS DS
  3930.     SDA first filename pointer -> fully-qualified directory name
  3931.     SDA CDS pointer -> current directory structure for drive with dir
  3932. Return: CF set on error
  3933.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  3934.     CF clear if successful
  3935.         CDS updated with new path
  3936. Notes:    this function is called by the DOS 3.1+ kernel
  3937.     directory string in CDS should not have a terminating backslash unless
  3938.       the current directory is the root
  3939. SeeAlso: AX=1101h,AX=1103h,INT 21/AH=3Bh,INT 21/AH=60h
  3940. --------N-2F1106-----------------------------
  3941. INT 2F CU - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  3942.     AX = 1106h
  3943.     BX = device info word from SFT
  3944.     ES:DI -> SFT
  3945.         SFT DPB field -> DPB of drive containing file
  3946. Return: CF set on error
  3947.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  3948.     CF clear if successful
  3949.         SFT updated (redirector must decrement open count, which may be
  3950.           done with INT 2F/AX=1208h)
  3951. Note:    this function is called by the DOS 3.1+ kernel
  3952. SeeAlso: AX=1116h,AX=1201h,AX=1208h,AX=1227h,INT 21/AH=3Eh
  3953. --------N-2F1107-----------------------------
  3954. INT 2F CU - NETWORK REDIRECTOR - COMMIT REMOTE FILE
  3955.     AX = 1107h
  3956.     ES:DI -> SFT
  3957.         SFT DPB field -> DPB of drive containing file
  3958. Return: CF set on error
  3959.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  3960.     CF clear if successful
  3961.         all buffers for file flushed
  3962.         directory entry updated
  3963. Note:    this function is called by the DOS 3.1+ kernel
  3964. SeeAlso: INT 21/AH=68h,INT 21/AX=5D01h
  3965. --------N-2F1108-----------------------------
  3966. INT 2F CU - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  3967.     AX = 1108h
  3968.     ES:DI -> SFT
  3969.         SFT DPB field -> DPB of drive containing file
  3970.     CX = number of bytes
  3971.     SS = DOS DS
  3972.     SDA DTA field -> user buffer
  3973. Return: CF set on error
  3974.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  3975.     CF clear if successful
  3976.         CX = number of bytes read (0000h = end of file)
  3977.         SFT updated
  3978. Note:    this function is called by the DOS 3.1+ kernel
  3979. SeeAlso: AX=1109h,AX=1229h,INT 21/AH=3Fh,INT 21/AX=5D06h
  3980. --------N-2F1109-----------------------------
  3981. INT 2F CU - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  3982.     AX = 1109h
  3983.     ES:DI -> SFT
  3984.         SFT DPB field -> DPB of drive containing file
  3985.     CX = number of bytes
  3986.     SS = DOS DS
  3987.     SDA DTA field -> user buffer
  3988. Return: CF set on error
  3989.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  3990.     CF clear if successful
  3991.         CX = number of bytes written
  3992.         SFT updated
  3993. Notes:    this function is called by the DOS 3.1+ kernel
  3994.     PrintCache v3.1 PCACHE.EXE intercepts this function for SFTs where
  3995.       the Device Driver Header field points at PCACHE, but does not
  3996.       intercept any other network redirector functions
  3997. SeeAlso: AX=1107h,AX=1108h,INT 21/AH=40h,INT 21/AX=5D06h
  3998. --------N-2F110A-----------------------------
  3999. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - LOCK REGION OF FILE
  4000.     AX = 110Ah
  4001.     BX = file handle
  4002.     CX:DX = starting offset
  4003.     SI = high word of size
  4004.     STACK: WORD low word of size
  4005.     ES:DI -> SFT
  4006.         SFT DPB field -> DPB of drive containing file
  4007.     SS = DOS DS
  4008. Return: CF set on error
  4009.        AL = DOS error code (see #0960 at INT 21/AH=59h)
  4010.     STACK unchanged
  4011. Notes:    this function is called by the DOS 3.10-3.31 kernel
  4012.     the redirector is expected to resolve lock conflicts
  4013. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  4014. --------N-2F110A-----------------------------
  4015. INT 2F CU - NETWORK REDIRECTOR (DOS 4.0+) - LOCK/UNLOCK REGION OF FILE
  4016.     AX = 110Ah
  4017.     BL = function
  4018.         00h lock
  4019.         01h unlock
  4020.     CX = number of lock/unlock parameters (0001h for DOS 4.0-6.1)
  4021.     DS:DX -> parameter block (see #1854)
  4022.     ES:DI -> SFT
  4023.         SFT DPB field -> DPB of drive containing file
  4024.     SS = DOS DS
  4025. Return: CF set on error
  4026.        AL = DOS error code (see #0960 at INT 21/AH=59h)
  4027. Notes:    this function is called by the DOS 4.0+ kernel
  4028.     the redirector is expected to resolve lock conflicts
  4029. SeeAlso: AX=110Bh,INT 21/AH=5Ch
  4030.  
  4031. Format of parameter block entry [array, but currently limited to single entry]:
  4032. Offset    Size    Description    (Table 1854)
  4033.  00h    DWORD    start offset
  4034.  04h    DWORD    size of region
  4035. --------N-2F110B-----------------------------
  4036. INT 2F CU - NETWORK REDIRECTOR (DOS 3.x only) - UNLOCK REGION OF FILE
  4037.     AX = 110Bh
  4038.     BX = file handle
  4039.     CX:DX = starting offset
  4040.     SI = high word of size
  4041.     STACK: WORD low word of size
  4042.     ES:DI -> SFT for file
  4043.         SFT DPB field -> DPB of drive containing file
  4044. Return: CF set on error
  4045.        AL = DOS error code (see #0960 at INT 21/AH=59h)
  4046.     STACK unchanged
  4047. Note:    this function is called by the DOS 3.1-3.31 kernel; DOS 4.0+ calls AX=110Ah instead
  4048. SeeAlso: AX=110Ah,INT 21/AH=5Ch
  4049. --------N-2F110C-----------------------------
  4050. INT 2F CU - NETWORK REDIRECTOR - GET DISK INFORMATION
  4051.     AX = 110Ch
  4052.     ES:DI -> current directory structure for desired drive
  4053. Return: CF clear if data valid
  4054.         AL = sectors per cluster
  4055.         AH = media ID byte
  4056.         BX = total clusters
  4057.         CX = bytes per sector
  4058.         DX = number of available clusters
  4059.     CF set if data invalid
  4060. Note:    this function is called by the DOS 3.1+ kernel
  4061. SeeAlso: INT 21/AH=36h
  4062. --------N-2F110D-----------------------------
  4063. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - SET REMOTE FILE'S ATTRIBUTES
  4064.     AX = 110Dh
  4065.     SDA first filename pointer -> name of file
  4066.     ???
  4067. Return: ???
  4068. Note:    similar to AX=110Eh
  4069. SeeAlso: AX=110Eh
  4070. --------N-2F110E-----------------------------
  4071. INT 2F CU - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  4072.     AX = 110Eh
  4073.     SS = DOS DS
  4074.     SDA first filename pointer -> fully-qualified name of file
  4075.     SDA CDS pointer -> current directory structure for drive with file
  4076.     STACK: WORD new file attributes
  4077. Return: CF set on error
  4078.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  4079.     CF clear if successful
  4080.     STACK unchanged
  4081. Note:    this function is called by the DOS 3.1+ kernel
  4082. SeeAlso: AX=110Dh,AX=110Fh,INT 21/AX=4301h,INT 21/AH=60h
  4083. --------N-2F110F-----------------------------
  4084. INT 2F CU - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  4085.     AX = 110Fh
  4086.     SS = DOS DS
  4087.     SDA first filename pointer -> fully-qualified name of file
  4088.     SDA CDS pointer -> current directory structure for drive with file
  4089. Return: CF set on error
  4090.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  4091.     CF clear if successful
  4092.         AX = file attributes
  4093.         BX:DI = file size
  4094. Note:    this function is called by the DOS 3.1+ kernel
  4095. SeeAlso: AX=110Eh,INT 21/AX=4300h,INT 21/AH=60h
  4096. --------N-2F1110-----------------------------
  4097. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET REMOTE FILE'S ATTRIBUTES AND SIZE
  4098.     AX = 1110h
  4099.     SDA first filename pointer -> name of file
  4100.     ???
  4101. Return: ???
  4102. Note:    appears to be similar to AX=110Fh
  4103. SeeAlso: AX=110Eh
  4104. --------N-2F1111-----------------------------
  4105. INT 2F CU - NETWORK REDIRECTOR - RENAME REMOTE FILE
  4106.     AX = 1111h
  4107.     SS = DS = DOS DS
  4108.     SDA first filename pointer = offset of fully-qualified old name
  4109.     SDA second filename pointer = offset of fully-qualified new name
  4110.     SDA CDS pointer -> current directory structure for drive with file
  4111. Return: CF set on error
  4112.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  4113.     CF clear if successful
  4114. Note:    this function is called by the DOS 3.1+ kernel
  4115. SeeAlso: AX=1112h,INT 21/AH=56h,INT 21/AH=60h
  4116. --------N-2F1112-----------------------------
  4117. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - RENAME REMOTE FILE
  4118.     AX = 1112h
  4119.     SS = DS = DOS DS
  4120.     SDA first filename pointer -> name of file
  4121.     ???
  4122. Return: ???
  4123. Note:    similar to AX=1111h
  4124. SeeAlso: AX=1111h
  4125. --------N-2F1113-----------------------------
  4126. INT 2F CU - NETWORK REDIRECTOR - DELETE REMOTE FILE
  4127.     AX = 1113h
  4128.     SS = DS = DOS DS
  4129.     SDA first filename pointer -> fully-qualified filename in DOS DS
  4130.     SDA CDS pointer -> current directory structure for drive with file
  4131. Return: CF set on error
  4132.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  4133.     CF clear if successful
  4134. Notes:    this function is called by the DOS 3.1+ kernel
  4135.     the filespec may contain wildcards
  4136. SeeAlso: AX=1114h,INT 21/AH=41h,INT 21/AH=60h
  4137. --------N-2F1114-----------------------------
  4138. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - DELETE REMOTE FILE
  4139.     AX = 1114h
  4140.     SDA first filename pointer -> name of file
  4141.     ???
  4142. Return: ???
  4143. Note:    similar to AX=1113h
  4144. SeeAlso: AX=1113h
  4145. --------N-2F1115-----------------------------
  4146. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - OPEN REMOTE FILE
  4147.     AX = 1115h
  4148.     SS = DOS DS
  4149.     ES:DI -> SFT ???
  4150.     ???
  4151. Return: ???
  4152. Note:    similar to AX=1116h
  4153. SeeAlso: AX=1116h,AX=112Eh
  4154. --------N-2F1116-----------------------------
  4155. INT 2F CU - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE
  4156.     AX = 1116h
  4157.     ES:DI -> uninitialized SFT
  4158.     SS = DOS DS
  4159.     SDA first filename pointer -> fully-qualified name of file to open
  4160.     STACK: WORD file access and sharing modes (see #0701 at INT 21/AH=3Dh)
  4161. Return: CF set on error
  4162.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  4163.     CF clear if successful
  4164.         SFT filled (except handle count, which DOS manages itself)
  4165.     STACK unchanged
  4166. Note:    this function is called by the DOS 3.1+ kernel
  4167. SeeAlso: AX=1106h,AX=1115h,AX=1117h,AX=1118h,AX=112Eh,INT 21/AH=3Dh
  4168. SeeAlso: INT 21/AH=60h
  4169. --------N-2F1117-----------------------------
  4170. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE REMOTE FILE
  4171.     AX = 1117h
  4172.     ES:DI -> uninitialized SFT
  4173.     SS = DOS DS
  4174.     SDA first filename pointer -> fully-qualified name of file to open
  4175.     SDA CDS pointer -> current directory structure for drive with file
  4176.     STACK: WORD file creation mode
  4177.             low byte = file attributes (see #0700 at INT 21/AH=3Ch)
  4178.             high byte = 00h normal create, 01h create new file
  4179. Return: CF set on error
  4180.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  4181.     CF clear if successful
  4182.         SFT filled (except handle count, which DOS manages itself)
  4183.     STACK unchanged
  4184. Note:    this function is called by the DOS 3.1+ kernel
  4185. SeeAlso: AX=1106h,AX=1116h,AX=1118h,AX=112Eh,INT 21/AH=3Ch,INT 21/AH=60h
  4186. --------N-2F1118-----------------------------
  4187. INT 2F CU - NETWORK REDIRECTOR - CREATE/TRUNCATE FILE WITHOUT CDS
  4188.     AX = 1118h
  4189.     ES:DI -> uninitialized SFT
  4190.     SS = DOS DS
  4191.     SDA first filename pointer -> fully-qualified name of file
  4192.     STACK: WORD file creation mode
  4193.             low byte = file attributes
  4194.             high byte = 00h normal create, 01h create new file
  4195. Return: ???
  4196.     STACK unchanged
  4197. Note:    this function is called by the DOS 3.1+ kernel when creating a file
  4198.       on a drive for which the SDA CDS pointer has offset FFFFh
  4199. SeeAlso: AX=1106h,AX=1116h,AX=1117h,AX=112Eh,INT 21/AH=60h
  4200. --------N-2F1119-----------------------------
  4201. INT 2F CU - NETWORK REDIRECTOR - FIND FIRST FILE WITHOUT CDS
  4202.     AX = 1119h
  4203.     SS = DS = DOS DS
  4204.     [DTA] = uninitialized 21-byte findfirst search data
  4205.           (see #0913 at INT 21/AH=4Eh)
  4206.     SDA first filename pointer -> fully-qualified search template
  4207.     SDA search attribute = attribute mask for search
  4208. Return: CF set on error
  4209.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  4210.     CF clear if successful
  4211.         [DTA] = updated findfirst search data
  4212.             (bit 7 of first byte must be set)
  4213.         [DTA+15h] = standard directory entry for file
  4214. Notes:    this function is called by the DOS 3.1+ kernel
  4215.     DOS 4.x IFSFUNC returns CF set, AX=0003h
  4216. SeeAlso: AX=111Ah,AX=111Bh
  4217. --------N-2F111A-----------------------------
  4218. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - FIND NEXT FILE WITHOUT CDS
  4219.     AX = 111Ah
  4220.     ???
  4221. Return: CF set
  4222.         AX = error code (03h for DOS 4.01 IFSFUNC)
  4223. Note:    use AX=111Ch for DOS 5+
  4224. SeeAlso: AX=1119h,AX=111Ch
  4225. --------N-2F111B-----------------------------
  4226. INT 2F CU - NETWORK REDIRECTOR - FINDFIRST
  4227.     AX = 111Bh
  4228.     SS = DS = DOS DS
  4229.     [DTA] = uninitialized 21-byte findfirst search data
  4230.           (see #0913 at INT 21/AH=4Eh)
  4231.     SDA first filename pointer -> fully-qualified search template
  4232.     SDA CDS pointer -> current directory structure for drive with file
  4233.     SDA search attribute = attribute mask for search
  4234. Return: CF set on error
  4235.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  4236.     CF clear if successful
  4237.         [DTA] = updated findfirst search data
  4238.             (bit 7 of first byte must be set)
  4239.         [DTA+15h] = standard directory entry for file
  4240. Note:    this function is called by the DOS 3.1+ kernel
  4241. SeeAlso: AX=1119h,AX=111Ch,INT 21/AH=4Eh,INT 21/AH=60h
  4242. --------N-2F111C-----------------------------
  4243. INT 2F CU - NETWORK REDIRECTOR - FINDNEXT
  4244.     AX = 111Ch
  4245.     SS = DS = DOS DS
  4246.     ES:DI -> CDS
  4247.     ES:DI -> DTA (MSDOS v5.0)
  4248.     [DTA] = 21-byte findfirst search data
  4249.           (see #0913 at INT 21/AH=4Eh)
  4250. Return: CF set on error
  4251.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  4252.     CF clear if successful
  4253.         [DTA] = updated findfirst search data
  4254.             (bit 7 of first byte must be set)
  4255.         [DTA+15h] = standard directory entry for file
  4256. Note:    this function is called by the DOS 3.1+ kernel
  4257. SeeAlso: AX=1119h,AX=111Bh,INT 21/AH=4Fh
  4258. --------N-2F111D-----------------------------
  4259. INT 2F CU - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS (ABORT)
  4260.     AX = 111Dh
  4261.     SS = DOS DS
  4262.     SDA PSP segment field = PSP of terminating process
  4263. Return: nothing
  4264. Notes:    used when a process is aborted; the process being terminated is
  4265.       indicated by the "sharing PSP" field in the SDA (offset 1Ah/1Ch)
  4266.     this function is called by the DOS 3.1+ kernel
  4267.     closes all FCBs opened by process
  4268. SeeAlso: INT 21/AX=5D04h
  4269. --------N-2F111E-----------------------------
  4270. INT 2F CU - NETWORK REDIRECTOR - DO REDIRECTION
  4271.     AX = 111Eh
  4272.     SS = DOS DS
  4273.     STACK: WORD function to execute
  4274.         5F00h  get redirection mode
  4275.             BL = type (03h printer, 04h disk)
  4276.             Return: BH = state (00h off, 01h on)
  4277.         5F01h  set redirection mode
  4278.             BL = type (03h printer, 04h disk)
  4279.             BH = state (00h off, 01h on)
  4280.         5F02h  get redirection list entry
  4281.             BX = redirection list index
  4282.             DS:SI -> 16-byte local device name buffer
  4283.             ES:DI -> 128-byte network name buffer
  4284.             Return: must set user's BX to device type and CX to
  4285.                 stored parameter value, using AX=1218h to get
  4286.                 stack frame address
  4287.         5F03h  redirect device
  4288.             BL = device type (see INT 21/AX=5F03h)
  4289.             CX = stored parameter value
  4290.             DS:SI -> ASCIZ source device name
  4291.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  4292.         5F04h  cancel redirection
  4293.             DS:SI -> ASCIZ device name or network path
  4294.         5F05h  get redirection list extended entry
  4295.             BX = redirection list index
  4296.             DS:SI -> buffer for ASCIZ source device name
  4297.             ES:DI -> buffer for destination ASCIZ network path
  4298.             Return: BH = status flag
  4299.                 BL = type (03h printer, 04h disk)
  4300.                 CX = stored parameter value
  4301.                 BP = NETBIOS local session number
  4302.         5F06h  similar to 5F05h???
  4303. Return: CF set on error
  4304.         AX = error code (see #0960 at INT 21/AH=59h)
  4305.     STACK unchanged
  4306. Notes:    this function is called by the DOS 3.1+ kernel on INT 21/AH=5Fh
  4307.       (including LAN Manager calls)
  4308.     the PC Network 1.00 redirector does not support function 5F06h
  4309. SeeAlso: INT 21/AX=5F00h,INT 21/AX=5F01h,INT 21/AX=5F02h,INT 21/AX=5F03h
  4310. SeeAlso: INT 21/AX=5F04h,INT 21/AX=5F05h,INT 21/AX=5F06h
  4311. --------N-2F111F-----------------------------
  4312. INT 2F CU - NETWORK REDIRECTOR - PRINTER SETUP
  4313.     AX = 111Fh
  4314.     STACK: WORD function
  4315.         5E02h  set printer setup
  4316.         5E03h  get printer setup
  4317.         5E04h  set printer mode
  4318.         5E05h  get printer mode
  4319. Return: CF set on error
  4320.         AX = error code (see #0960 at INT 21/AH=59h)
  4321.     STACK unchanged
  4322. Note:    this function is called by the DOS 3.1+ kernel
  4323. SeeAlso: INT 21/AX=5E02h,INT 21/AX=5E03h,INT 21/AX=5E04h,INT 21/AX=5E05h
  4324. --------N-2F1120-----------------------------
  4325. INT 2F CU - NETWORK REDIRECTOR - FLUSH ALL DISK BUFFERS
  4326.     AX = 1120h
  4327.     DS = DOS DS
  4328.     ???
  4329. Return: CF clear (successful)
  4330. Notes:    this function is called by the DOS 3.1+ kernel
  4331.     uses CDS array pointer and LASTDRIVE= entries in DOS list of lists
  4332. SeeAlso: INT 21/AH=0Dh,INT 21/AX=5D01h
  4333. --------N-2F1121-----------------------------
  4334. INT 2F CU - NETWORK REDIRECTOR - SEEK FROM END OF REMOTE FILE
  4335.     AX = 1121h
  4336.     CX:DX = offset (in bytes) from end
  4337.     ES:DI -> SFT
  4338.         SFT DPB field -> DPB of drive with file
  4339.     SS = DOS DS
  4340. Return: CF set on error
  4341.         AL = DOS error code (see #0960 at INT 21/AH=59h)
  4342.     CF clear if successful
  4343.         DX:AX = new file position
  4344. Note:    this function is called by the DOS 3.1+ kernel, but only when seeking
  4345.       from the end of a file opened with sharing modes set in such a
  4346.       manner that another process is able to change the size of the file
  4347.       while it is already open
  4348. SeeAlso: AX=1228h,INT 21/AH=42h
  4349. --------N-2F1122-----------------------------
  4350. INT 2F CU - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK
  4351.     AX = 1122h
  4352.     SS = DOS DS
  4353.     DS = PSP of process about to terminate
  4354. Return: ???
  4355. Notes:    this function is called by the DOS 3.1+ kernel
  4356.     after calling this function, the kernel calls INT 2F/AX=111Dh
  4357. SeeAlso: AX=111Dh,INT 21/AH=4Ch,INT 60/DI=0601h
  4358. --------N-2F1123-----------------------------
  4359. INT 2F CU - NETWORK REDIRECTOR - QUALIFY REMOTE FILENAME
  4360.     AX = 1123h
  4361.     DS:SI -> ASCIZ filename to canonicalize
  4362.     ES:DI -> 128-byte buffer for qualified name
  4363. Return: CF set if not resolved
  4364. Notes:    called by MS-DOS 3.1+ kernel, but not called by DR DOS 5.0 unless the
  4365.       filename matches the name of a character device
  4366.     called first when DOS attempts to resolve a filename (unless inside an
  4367.       AX=5D00h server call); if this fails, DOS resolves the name locally
  4368. SeeAlso: AX=1221h,INT 21/AH=60h
  4369. --------N-2F1124-----------------------------
  4370. INT 2F CU - NETWORK REDIRECTOR - TURN OFF REMOTE PRINTER
  4371.     AX = 1124h
  4372.     ES:DI -> SFT
  4373.     SS = DOS DS
  4374.     ???
  4375. Return: CX = ???
  4376. Note:    this function is called by the DOS 3.1+ kernel if AX=1126h returns CF set
  4377. SeeAlso: AX=1126h
  4378. --------N-2F1125-----------------------------
  4379. INT 2F CU - NETWORK REDIRECTOR - REDIRECTED PRINTER MODE
  4380.     AX = 1125h
  4381.     STACK: WORD subfunction
  4382.         5D07h get print stream state
  4383.             Return: DL = current state
  4384.         5D08h set print stream state
  4385.             DL = new state
  4386.         5D09h finish print job
  4387. Return: CF set on error
  4388.         AX = error code (see #0960 at INT 21/AH=59h)
  4389.     STACK unchanged
  4390. Note:    this function is called by the DOS 3.1+ kernel
  4391. SeeAlso: INT 21/AX=5D07h,INT 21/AX=5D08h,INT 21/AX=5D09h
  4392. --------N-2F1126-----------------------------
  4393. INT 2F CU - NETWORK REDIRECTOR - REMOTE PRINTER ECHO ON/OFF
  4394.     AX = 1126h
  4395.     ES:DI -> SFT for file handle 4???
  4396.     SS = DOS DS???
  4397.     ???
  4398. Return: CF set on error
  4399. Notes:    this function is called by the DOS 3.1+ kernel
  4400.     called when print echoing (^P, ^PrtSc) changes state and STDPRN has
  4401.       bit 11 of the device information word in the SFT set
  4402. SeeAlso: AX=1124h
  4403. --------N-2F1127-----------------------------
  4404. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  4405.     AX = 1127h
  4406. Return: CF set
  4407.         AX = 0001h (invalid function) (see #0960 at INT 21/AH=59h)
  4408. --------N-2F1127BX4E57-----------------------
  4409. INT 2F - NetWare 4.0 - REMOTE FILE COPY
  4410.     AX = 1127h
  4411.     BX = 4E57h ('NW') (signature identifying this as a NetWare call)
  4412.     SI = source file handle
  4413.     DI = destination file handle
  4414.     DX:CX = number of bytes to copy, starting at current file position
  4415. Return: CF clear if successful
  4416.     CF set on error
  4417.         AX = error code (05h,06h,0Bh,11h,3Bh) (see #0960)
  4418.     DX:CX = number of bytes successfully copied (file position updated)
  4419. Notes:    this is the only call which may be made directly to the NetWare
  4420.       redirector from an application
  4421.     COMMAND.COM's COPY and DOS's XCOPY reportedly call INT 21/AX=1127h in
  4422.       order to speed up copies between files on the same network server;
  4423.       if error code 11h (not same device) is returned, the copy is
  4424.       performed in the usual manner.  However, no such calls appear to
  4425.       be present in MS-DOS 6.22.
  4426. --------N-2F1128-----------------------------
  4427. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  4428.     AX = 1128h
  4429. Return: CF set
  4430.         AX = 0001h (invalid function) (see #0960 at INT 21/AH=59h)
  4431. --------N-2F1129-----------------------------
  4432. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - UNUSED
  4433.     AX = 1129h
  4434. Return: CF set
  4435.         AX = 0001h (invalid function) (see #0960 at INT 21/AH=59h)
  4436. --------N-2F112A-----------------------------
  4437. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - CLOSE ALL FILES FOR PROCESS
  4438.     AX = 112Ah
  4439.     DS = DOS DS
  4440.     ???
  4441. Return: ???
  4442. Note:    does something to each IFS driver
  4443. --------N-2F112B-----------------------------
  4444. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GENERIC IOCTL
  4445.     AX = 112Bh
  4446.     SS = DOS DS
  4447.     CX = function/category
  4448.     DS:DX -> parameter block
  4449.     STACK: WORD value of AX on entry to INT 21 (440Ch or 440Dh)
  4450.     ???
  4451. Return: CF set on error
  4452.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  4453.     CF clear if successful
  4454. Note:    this function is called by the DOS 4.0 kernel
  4455. --------N-2F112C-----------------------------
  4456. INT 2F CU - NETWORK REDIRECTOR (DOS 4.0+) - "UPDATE_CB" - ???
  4457.     AX = 112Ch
  4458.     SS = DOS DS
  4459.     SDA current SFT pointer -> SFT for file
  4460.     ???
  4461. Return: CF set on error
  4462. Note:    called by SHARE in DOS 5.0-6.0
  4463. --------N-2F112D-----------------------------
  4464. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - EXTENDED ATTRIBUTES
  4465.     AX = 112Dh
  4466.     BL = subfunction (value of AL on INT 21)
  4467.         02h get extended attributes
  4468.         03h get extended attribute properties
  4469.         04h set extended attributes
  4470.         Return: CF clear
  4471.         else ???
  4472.         Return: CX = ??? (00h or 02h for DOS 4.01)
  4473.     ES:DI -> SFT for file
  4474.     SS = DOS DS
  4475. Return: DS = DOS DS
  4476. Note:    this function is called by the DOS 4.0 kernel on INT 21/AX=5702h,
  4477.       INT 21/AX=5703h, and INT 21/AX=5704h
  4478. SeeAlso: INT 21/AX=5702h,INT 21/AX=5703h,INT 21/AX=5704h,INT 21/AH=6Eh
  4479. --------N-2F112E-----------------------------
  4480. INT 2F CU - NETWORK REDIRECTOR (DOS 4.0+) - EXTENDED OPEN/CREATE FILE
  4481.     AX = 112Eh
  4482.     SS = DS = DOS DS
  4483.     ES:DI -> uninitialized SFT for file
  4484.     STACK: WORD file attribute for created/truncated file
  4485.             low byte = file attributes
  4486.             high byte = 00h normal create/open, 01h create new file
  4487.     SDA first filename pointer -> fully-qualified filename
  4488.     SDA extended file open action = action code
  4489.           (see #1044 at INT 21/AX=6C00h)
  4490.     SDA extended file open mode = open mode for file (see INT 21/AX=6C00h)
  4491. Return: CF set on error
  4492.         AX = error code
  4493.     CF clear if successful
  4494.         CX = result code
  4495.         01h file opened
  4496.         02h file created
  4497.         03h file replaced (truncated)
  4498.         SFT initialized (except handle count, which DOS manages itself)
  4499. Note:    this function is called by the DOS 4.0+ kernel
  4500. BUG:    this function is not called correctly under some DOS versions
  4501.       (at least 5.0 and 6.2):
  4502.         the file attribute on the stack is not correct if the action
  4503.           code is 11h,
  4504.         the result code in CX is not passed back to the application.
  4505. SeeAlso: AX=1115h,AX=1116h,AX=1117h,INT 21/AX=6C00h
  4506. --------N-2F112F-----------------------------
  4507. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - IFS IOCTL
  4508.     AX = 112Fh
  4509.     SS = DOS DS
  4510.     STACK: WORD function in low byte
  4511.         00h ???
  4512.             DS:SI -> Current Directory Structure???
  4513.             CL = drive (1=A:)
  4514.         01h ???
  4515.             DS:SI -> ???
  4516.             CL = file handle???
  4517.         02h ???
  4518.             DS:SI -> Current Directory Structure???
  4519.             DI = ???
  4520.             CX = drive (1=A:)
  4521.     ???
  4522. Return: CF set on error
  4523.         AX = DOS error code (see #0960 at INT 21/AH=59h)
  4524.     CF clear if successful
  4525. Note:    this function is called by the DOS 4.0 kernel
  4526. SeeAlso: INT 21/AH=6Bh
  4527. --------N-2F1130-----------------------------
  4528. INT 2F CU - IFSFUNC.EXE (DOS 4.x only) - GET IFSFUNC SEGMENT
  4529.     AX = 1130h
  4530. Return: ES = CS of resident IFSFUNC
  4531. --------N-2F1180-----------------------------
  4532. INT 2F - LAN Manager Enhanced DOS Services - ???
  4533.     AX = 1180h
  4534.     ???
  4535. Return: ???
  4536. --------N-2F1182-----------------------------
  4537. INT 2F - LAN Manager Enhanced DOS Services - INSTALL SERVICE
  4538.     AX = 1182h
  4539.     ???
  4540. Return: ???
  4541. --------N-2F1184-----------------------------
  4542. INT 2F - LAN Manager Enhanced DOS - ???
  4543.     AX = 1184h
  4544.     ???
  4545. Return: ???
  4546. --------N-2F1186-----------------------------
  4547. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe
  4548.     AX = 1186h
  4549.     DS:SI -> stack frame (see #1855)
  4550. Return: CF clear if successful
  4551.     CF set if error
  4552.         AX = error code
  4553. Note:    LAN Manager enhance mode adds features beyond the standard redirector
  4554.       file/printer services
  4555. SeeAlso: AX=118Fh,AX=1190h,AX=1191h,INT 21/AX=5F39h
  4556.  
  4557. Format of LAN Manager DosReadAsynchNmPipe stack frame:
  4558. Offset    Size    Description    (Table 1855)
  4559.  00h    DWORD    -> number of bytes read
  4560.  04h    WORD    size of buffer
  4561.  06h    DWORD    -> buffer
  4562.  0Ah    DWORD    -> return code
  4563.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  4564.  12h    WORD    handle
  4565. --------N-2F118A-----------------------------
  4566. INT 2F - LAN Manager 2.0+ DOS Enhanced ENCRYPT.EXE - STREAM ENCRYPTION SERVICE
  4567.     AX = 118Ah
  4568.     BX = function (0000h or 0001h)
  4569. Return: CF clear if successful
  4570.         AX = 1100h success
  4571.     CF set if error
  4572.         AX = 0001h, etc.
  4573. SeeAlso: AX=1186h,AH=41h,AH=42h,AH=4Bh
  4574. --------N-2F118B-----------------------------
  4575. INT 2F - LAN Manager Enhanced DOS - ???
  4576.     AX = 118Bh
  4577.     ???
  4578. Return: ???
  4579. --------N-2F118C-----------------------------
  4580. INT 2F - LAN Manager Enhanced DOS - ???
  4581.     AX = 118Ch
  4582.     ???
  4583. Return: ???
  4584. --------N-2F118E-----------------------------
  4585. INT 2F - LAN Manager Enhanced DOS - ???
  4586.     AX = 118Eh
  4587.     ???
  4588. Return: ???
  4589. --------N-2F118F-----------------------------
  4590. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe
  4591.     AX = 118Fh
  4592.     DS:SI -> stack frame (see #1856)
  4593. Return: CF clear if successful
  4594.     CF set if error
  4595.         AX = error code
  4596. SeeAlso: AX=1186h,AX=1191h,INT 21/AX=5F3Ah
  4597.  
  4598. Format of LAN Manager DosReadAsynchNmPipe stack frame:
  4599. Offset    Size    Description    (Table 1856)
  4600.  00h    DWORD    -> number of bytes read
  4601.  04h    WORD    Size of buffer
  4602.  06h    DWORD    -> buffer
  4603.  0Ah    DWORD    -> return code
  4604.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  4605.  12h    WORD    handle
  4606. --------N-2F1190-----------------------------
  4607. INT 2F - LAN Manager Enhanced DOS - DosReadAsynchNmPipe2
  4608.     AX = 1190h
  4609.     DS:SI -> stack frame (see #1857)
  4610. Return: CF clear if successful
  4611.     CF set if error
  4612.         AX = error code
  4613. SeeAlso: AX=1186h,AX=1191h
  4614.  
  4615. Format of LAN Manager DosReadAsynchNmPipe2 stack frame:
  4616. Offset    Size    Description    (Table 1857)
  4617.  00h    DWORD    -> number of bytes read
  4618.  04h    WORD    size of buffer
  4619.  06h    DWORD    -> buffer
  4620.  0Ah    DWORD    -> return code
  4621.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  4622.  12h    WORD    handle
  4623.  14h    DWORD    ???
  4624. --------N-2F1191-----------------------------
  4625. INT 2F - LAN Manager Enhanced DOS - DosWriteAsynchNmPipe2
  4626.     AX = 1191h
  4627.     DS:SI -> stack frame (see #1858)
  4628. Return: CF clear if successful
  4629.     CF set if error
  4630.         AX = error code
  4631. SeeAlso: AX=118Fh,AX=1190h,INT 21/AX=5F3Ah
  4632.  
  4633. Format of LAN Manager DosReadAsynchNmPipe2 stack frame:
  4634. Offset    Size    Description    (Table 1858)
  4635.  00h    DWORD    -> number of bytes read
  4636.  04h    WORD    size of buffer
  4637.  06h    DWORD    -> buffer
  4638.  0Ah    DWORD    -> return code
  4639.  0Eh    DWORD    function to call on completion as function( char far *buffer )
  4640.  12h    WORD    handle
  4641.  14h    DWORD    ???
  4642. --------D-2F1200-----------------------------
  4643. INT 2F U - DOS 3.0+ internal - INSTALLATION CHECK
  4644.     AX = 1200h
  4645. Return: AL = FFh (for compatibility with other INT 2F functions)
  4646. --------D-2F1201-----------------------------
  4647. INT 2F U - DOS 3.0+ internal - CLOSE CURRENT FILE
  4648.     AX = 1201h
  4649.     SS = DOS DS (must be using a DOS internal stack)
  4650.     SDA current SFT pointer -> SFT of file to close
  4651. Return: CF set on error
  4652.     BX???
  4653.     CX new reference count of SFT
  4654.     ES:DI -> SFT for file
  4655. SeeAlso: AX=1106h,AX=1227h,INT 21/AH=3Eh
  4656. --------D-2F1202-----------------------------
  4657. INT 2F U - DOS 3.0+ internal - GET INTERRUPT ADDRESS
  4658.     AX = 1202h
  4659.     STACK: WORD vector number
  4660. Return: ES:BX -> interrupt vector (DWORD containing handler's address)
  4661.     STACK unchanged
  4662. --------D-2F1203-----------------------------
  4663. INT 2F U - DOS 3.0+ internal - GET DOS DATA SEGMENT
  4664.     AX = 1203h
  4665. Return: DS = data segment of IBMDOS.COM/MSDOS.SYS
  4666. Note:    for DOS prior to version 5.0, the data segment is the same as the code
  4667.       segment
  4668. --------D-2F1204-----------------------------
  4669. INT 2F U - DOS 3.0+ internal - NORMALIZE PATH SEPARATOR
  4670.     AX = 1204h
  4671.     STACK: WORD character to normalize
  4672. Return: AL = normalized character (forward slash turned to backslash, all
  4673.           others unchanged)
  4674.     ZF set if path separator
  4675.     STACK unchanged
  4676. --------D-2F1205-----------------------------
  4677. INT 2F U - DOS 3.0+ internal - OUTPUT CHARACTER TO STANDARD OUTPUT
  4678.     AX = 1205h
  4679.     STACK: WORD character to output
  4680. Return: STACK unchanged
  4681. Note:    can be called only from within DOS
  4682. --------D-2F1206-----------------------------
  4683. INT 2F U - DOS 3.0+ internal - INVOKE CRITICAL ERROR
  4684.     AX = 1206h
  4685.     DI = error code
  4686.     BP:SI -> device driver header
  4687.     SS = DOS DS (must be using a DOS internal stack)
  4688.     STACK: WORD value to be passed to INT 24 in AX
  4689. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  4690.     STACK unchanged
  4691. SeeAlso: INT 24
  4692. --------D-2F1207-----------------------------
  4693. INT 2F U - DOS 3.0+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  4694.     AX = 1207h
  4695.     DS:DI -> disk buffer
  4696. Return: nothing
  4697. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  4698.       recently used is first); under DOS 3.3, the buffer is then moved to
  4699.       the start of the disk buffer chain if it was marked unused
  4700. Notes:    can be called only from within DOS
  4701.     this function is nearly the same as AX=120Fh
  4702. SeeAlso: AX=120Fh
  4703. --------D-2F1208-----------------------------
  4704. INT 2F U - DOS 3.0+ internal - DECREMENT SFT REFERENCE COUNT
  4705.     AX = 1208h
  4706.     ES:DI -> SFT
  4707. Return: AX = original value of reference count
  4708. Notes:    if the reference count was 1, it is set to FFFFh (since 0 indicates
  4709.       that the SFT is not in use).    It is the caller's responsibility to
  4710.       set the reference count to zero after cleaning up.
  4711.     used by network redirectors such as MSCDEX
  4712. SeeAlso: AX=1106h
  4713. --------D-2F1209-----------------------------
  4714. INT 2F U - DOS 3.0+ internal - FLUSH AND FREE DISK BUFFER
  4715.     AX = 1209h
  4716.     DS:DI -> disk buffer
  4717. Return: disk buffer marked unused, contents written to disk if buffer dirty
  4718. Note:    can be called only from within DOS
  4719. SeeAlso: AX=120Eh,AX=1215h
  4720. --------D-2F120A-----------------------------
  4721. INT 2F U - DOS 3.0+ internal - PERFORM CRITICAL ERROR INTERRUPT
  4722.     AX = 120Ah
  4723.     DS = SS = DOS DS (must be using a DOS internal stack)
  4724.     STACK: WORD extended error code
  4725. Return: AL = user response (0=ignore, 1=retry, 2=abort, 3=fail)
  4726.     CF clear if retry, set otherwise
  4727.     STACK unchanged
  4728. Notes:    can only be called during a DOS function call, as it uses various
  4729.       fields in the SDA to set up the registers for the INT 24
  4730.     reportedly sets current DPB's first root directory sector to 1
  4731. SeeAlso: INT 24
  4732. --------D-2F120B-----------------------------
  4733. INT 2F U - DOS 3.0+ internal - SIGNAL SHARING VIOLATION TO USER
  4734.     AX = 120Bh
  4735.     ES:DI -> system file table entry for previous open of file
  4736.     STACK: WORD extended error code (should be 20h--sharing violation)
  4737. Return: CF clear if operation should be retried
  4738.     CF set if operation should not be retried
  4739.         AX = error code (20h) (see #0960 at INT 21/AH=59h)
  4740.     STACK unchanged
  4741. Notes:    can only be called during a DOS function call
  4742.     should only be called if an attempt was made to open an already-open
  4743.       file contrary to the sharing rules
  4744.     invokes INT 24 if SFT file opened via FCB or in compatibility mode with
  4745.       inheritance allowed
  4746. --------D-2F120C-----------------------------
  4747. INT 2F U - DOS 3.0+ internal - OPEN DEVICE AND SET SFT OWNER/MODE
  4748.     AX = 120Ch
  4749.     SDA current SFT pointer -> SFT for file
  4750.     DS = DOS DS
  4751.     SS = DOS DS (must be using a DOS internal stack)
  4752. Return: ES, DI, AX destroyed
  4753. Notes:    invokes "device open" call on device driver for SFT
  4754.     changes owner of last-accessed SFT to calling process if it was opened
  4755.       via FCB
  4756.     called by network redirectors such as MSCDEX
  4757. --------D-2F120D-----------------------------
  4758. INT 2F U - DOS 3.0+ internal - GET DATE AND TIME
  4759.     AX = 120Dh
  4760.     SS = DOS DS (must be using a DOS internal stack)
  4761. Return: AX = current date in packed format (see #0952 at INT 21/AX=5700h)
  4762.     DX = current time in packed format (see #0951 at INT 21/AX=5700h)
  4763. SeeAlso: INT 21/AH=2Ah,INT 21/AH=2Ch
  4764. --------D-2F120E-----------------------------
  4765. INT 2F U - DOS 3.0+ internal - MARK ALL DISK BUFFERS UNREFERENCED
  4766.     AX = 120Eh
  4767.     SS = DOS DS (must be using a DOS internal stack)
  4768. Return: DS:DI -> first disk buffer
  4769. Notes:    clears "referenced" flag on all disk buffers
  4770.     in DOS 5+, this has become essentially a NOP, invoking the same code
  4771.       used by AX=1224h (SHARING DELAY)
  4772. SeeAlso: AX=1209h,AX=1210h,INT 21/AH=0Dh
  4773. --------D-2F120F-----------------------------
  4774. INT 2F U - DOS 3.0+ internal - MAKE BUFFER MOST RECENTLY USED
  4775.     AX = 120Fh
  4776.     DS:DI -> disk buffer
  4777.     SS = DOS DS (must be using a DOS internal stack)
  4778. Return: DS:DI -> next buffer in buffer list
  4779. Desc:    move the indicated buffer to the end of the disk buffer chain (least-
  4780.       recently used is first); under DOS 3.3, the buffer is then moved to
  4781.       the start of the disk buffer chain if it was marked unused
  4782. Note:    this function is the same as AX=1207h except that it returns a
  4783.       pointer to the buffer following the specified buffer in the buffer
  4784.       chain
  4785. SeeAlso: AX=1207h
  4786. --------D-2F1210-----------------------------
  4787. INT 2F U - DOS 3.0+ internal - FIND UNREFERENCED DISK BUFFER
  4788.     AX = 1210h
  4789.     DS:DI -> first disk buffer to check
  4790. Return: ZF clear if found
  4791.         DS:DI -> first unreferenced disk buffer
  4792.     ZF set if not found
  4793. Note:    in DOS 5+, this has become essentially a NOP, invoking the same code
  4794.       used by AX=1224h (SHARING DELAY)
  4795. SeeAlso: AX=120Eh
  4796. --------D-2F1211-----------------------------
  4797. INT 2F U - DOS 3.0+ internal - NORMALIZE ASCIZ FILENAME
  4798.     AX = 1211h
  4799.     DS:SI -> ASCIZ filename to normalize
  4800.     ES:DI -> buffer for normalized filename
  4801. Return: destination buffer filled with uppercase filename, with slashes turned
  4802.     to backslashes
  4803. SeeAlso: AX=121Eh,AX=1221h
  4804. --------D-2F1212-----------------------------
  4805. INT 2F U - DOS 3.0+ internal - GET LENGTH OF ASCIZ STRING
  4806.     AX = 1212h
  4807.     ES:DI -> ASCIZ string
  4808. Return: CX = length of string
  4809. SeeAlso: AX=1225h
  4810. --------D-2F1213-----------------------------
  4811. INT 2F U - DOS 3.0+ internal - UPPERCASE CHARACTER
  4812.     AX = 1213h
  4813.     STACK: WORD character to convert to uppercase
  4814. Return: AL = uppercase character
  4815.     STACK unchanged
  4816. --------D-2F1214-----------------------------
  4817. INT 2F U - DOS 3.0+ internal - COMPARE FAR POINTERS
  4818.     AX = 1214h
  4819.     DS:SI = first pointer
  4820.     ES:DI = second pointer
  4821. Return: ZF set if pointers are equal, ZF clear if not equal
  4822.     CF clear if pointers equal, CF set if not
  4823. --------D-2F1215-----------------------------
  4824. INT 2F U - DOS 3.0+ internal - FLUSH BUFFER
  4825.     AX = 1215h
  4826.     DS:DI -> disk buffer
  4827.     SS = DOS DS (must be using a DOS internal stack)
  4828.     STACK: WORD drives for which to skip buffer
  4829.         ignore buffer if drive same as high byte, or bytes differ and
  4830.           the buffer is for a drive OTHER than that given in low byte
  4831. Return: STACK unchanged
  4832. Note:    can be called only from within DOS
  4833. SeeAlso: AX=1209h
  4834. --------D-2F1216-----------------------------
  4835. INT 2F U - DOS 3.0+ internal - GET ADDRESS OF SYSTEM FILE TABLE ENTRY
  4836.     AX = 1216h
  4837.     BX = system file table entry number
  4838. Return: CF clear if successful
  4839.         ES:DI -> system file table entry
  4840.         BX = relative entry number in system file table containing entry
  4841.         AX destroyed
  4842.     CF set if BX greater than FILES=
  4843. Note:    supported by DR DOS 5+
  4844. SeeAlso: AX=1220h
  4845. --------D-2F1217-----------------------------
  4846. INT 2F U - DOS 3.0+ internal - GET CURRENT DIRECTORY STRUCTURE FOR DRIVE
  4847.     AX = 1217h
  4848.     SS = DOS DS (must be using a DOS internal stack)
  4849.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  4850. Return: CF set on error
  4851.         (drive > LASTDRIVE)
  4852.     CF clear if successful
  4853.         DS:SI -> current directory structure for specified drive
  4854.     STACK unchanged
  4855. SeeAlso: AX=1219h
  4856. --------D-2F1218-----------------------------
  4857. INT 2F U - DOS 3.0+ internal - GET CALLER'S REGISTERS
  4858.     AX = 1218h
  4859. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  4860. Note:    only valid while within DOS
  4861. --------D-2F1219-----------------------------
  4862. INT 2F U - DOS 3.0+ internal - SET DRIVE???
  4863.     AX = 1219h
  4864.     SS = DOS DS (must be using a DOS internal stack)
  4865.     STACK: WORD drive (0 = default, 1 = A:, etc)
  4866. Return: ???
  4867.     STACK unchanged
  4868. Notes:    calls AX=1217h
  4869.     builds a current directory structure if inside server call
  4870.       (INT 21/AX=5D00h)
  4871. SeeAlso: AX=1217h,AX=121Fh
  4872. --------D-2F121A-----------------------------
  4873. INT 2F U - DOS 3.0+ internal - GET FILE'S DRIVE
  4874.     AX = 121Ah
  4875.     DS:SI -> filename
  4876. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  4877.     DS:SI -> filename without leading X: (if present)
  4878. SeeAlso: INT 21/AH=19h,INT 21/AH=60h
  4879. --------D-2F121B-----------------------------
  4880. INT 2F U - DOS 3.0+ internal - SET YEAR/LENGTH OF FEBRUARY
  4881.     AX = 121Bh
  4882.     CL = year - 1980
  4883. Return: AL = number of days in February
  4884. Note:    requires DS to be set to the DOS data segment
  4885. SeeAlso: INT 21/AH=2Bh
  4886. --------D-2F121C-----------------------------
  4887. INT 2F U - DOS 3.0+ internal - CHECKSUM MEMORY
  4888.     AX = 121Ch
  4889.     DS:SI -> start of memory to checksum
  4890.     CX = number of bytes
  4891.     DX = initial checksum
  4892.     SS = DOS DS (must be using a DOS internal stack)
  4893. Return: AX, CX destroyed
  4894.     DX = checksum
  4895.     DS:SI -> first byte after checksummed range
  4896. Notes:    used by DOS to determine day count since 1/1/80 given a date
  4897.     supported by DR DOS 5.0+
  4898. SeeAlso: AX=121Dh
  4899. --------D-2F121D-----------------------------
  4900. INT 2F U - DOS 3.0+ internal - SUM MEMORY
  4901.     AX = 121Dh
  4902.     DS:SI -> memory to add up
  4903.     CX = 0000h
  4904.     DX = limit
  4905. Return: AL = byte which exceeded limit
  4906.     CX = number of bytes before limit exceeded
  4907.     DX = remainder after adding first CX bytes
  4908.     DS:SI -> byte beyond the one which exceeded the limit
  4909. Notes:    used by DOS to determine year or month given day count since 1/1/80
  4910.     supported by DR DOS 5.0+
  4911. SeeAlso: AX=121Ch
  4912. --------D-2F121E-----------------------------
  4913. INT 2F U - DOS 3.0+ internal - COMPARE FILENAMES
  4914.     AX = 121Eh
  4915.     DS:SI -> first ASCIZ filename
  4916.     ES:DI -> second ASCIZ filename
  4917. Return: ZF set if filenames equivalent, ZF clear if not
  4918. Note:    supported by DR DOS 5.0+
  4919. SeeAlso: AX=1211h,AX=1221h
  4920. --------D-2F121F-----------------------------
  4921. INT 2F U - DOS 3.0+ internal - BUILD CURRENT DIRECTORY STRUCTURE
  4922.     AX = 121Fh
  4923.     SS = DOS DS (must be using a DOS internal stack)
  4924.     STACK: WORD drive letter
  4925. Return: ES:DI -> current directory structure (will be overwritten by next call)
  4926.     STACK unchanged
  4927. --------D-2F1220-----------------------------
  4928. INT 2F U - DOS 3.0+ internal - GET JOB FILE TABLE ENTRY
  4929.     AX = 1220h
  4930.     BX = file handle
  4931. Return: CF set on error
  4932.         AL = 6 (invalid file handle)
  4933.     CF clear if successful
  4934.         ES:DI -> JFT entry for file handle in current process
  4935. Notes:    the byte pointed at by ES:DI contains the number of the SFT for the
  4936.       file handle, or FFh if the handle is not open
  4937.     supported by DR DOS 5.0+
  4938. SeeAlso: AX=1216h,AX=1229h
  4939. --------D-2F1221-----------------------------
  4940. INT 2F U - DOS 3.0+ internal - CANONICALIZE FILE NAME
  4941.     AX = 1221h
  4942.     DS:SI -> file name to be fully qualified
  4943.     ES:DI -> 128-byte buffer for resulting canonical file name
  4944.     SS = DOS DS (must be using a DOS internal stack)
  4945. Return: (see INT 21/AH=60h)
  4946. Note:    identical to INT 21/AH=60h
  4947. SeeAlso: AX=1123h,INT 21/AH=60h
  4948. --------D-2F1222-----------------------------
  4949. INT 2F U - DOS 3.0+ internal - SET EXTENDED ERROR INFO
  4950.     AX = 1222h
  4951.     SS = DOS data segment
  4952.     SS:SI -> 4-byte records
  4953.         BYTE    error code, FFh = last record
  4954.         BYTE    error class, FFh = don't change
  4955.         BYTE    suggested action, FFh = don't change
  4956.         BYTE    error locus, FFh = don't change
  4957.     SDA error code set
  4958. Return: SI destroyed
  4959.     SDA error class, error locus, and suggested action fields set
  4960. Note:    can be called only from within DOS
  4961. SeeAlso: AX=122Dh,INT 21/AH=59h,INT 21/AX=5D0Ah
  4962. --------D-2F1223-----------------------------
  4963. INT 2F U - DOS 3.0+ internal - CHECK IF CHARACTER DEVICE
  4964.     AX = 1223h
  4965.     DS = DOS DS
  4966.     SS = DOS DS (must be using a DOS internal stack)
  4967.     SDA+218h (DOS 3.10-3.30) = eight-character blank-padded name
  4968.     SDA+22Bh (DOS 4.0-6.0) = eight-character blank-padded name
  4969. Return: CF set if no character device by that name found
  4970.     CF clear if found
  4971.         BH = low byte of device attribute word
  4972. Note:    can only be called from within DOS
  4973. SeeAlso: INT 21/AX=5D06h,INT 21/AX=5D0Bh
  4974. --------D-2F1224-----------------------------
  4975. INT 2F U - DOS 3.0+ internal - SHARING RETRY DELAY
  4976.     AX = 1224h
  4977.     SS = DOS DS (must be using a DOS internal stack)
  4978. Return: after delay set by INT 21/AX=440Bh, unless in server call
  4979.       (INT 21/AX=5D00h)
  4980. Note:    delay is dependent on the processor speed, and is skipped entirely if
  4981.       inside a server call
  4982. SeeAlso: INT 21/AX=440Bh,INT 21/AH=52h,INT 62/AX=0097h
  4983. --------D-2F1225-----------------------------
  4984. INT 2F U - DOS 3.0+ internal - GET LENGTH OF ASCIZ STRING
  4985.     AX = 1225h
  4986.     DS:SI -> ASCIZ string
  4987. Return: CX = length of string
  4988. Note:    supported by DR DOS 5.0+
  4989. SeeAlso: AX=1212h
  4990. --------D-2F1226-----------------------------
  4991. INT 2F U - DOS 3.3+ internal - OPEN FILE
  4992.     AX = 1226h
  4993.     CL = access mode
  4994.     DS:DX -> ASCIZ filename
  4995.     SS = DOS DS (must be using a DOS internal stack)
  4996. Return: CF set on error
  4997.         AL = error code (see #0960 at INT 21/AH=59h)
  4998.     CF clear if successful
  4999.         AX = file handle
  5000. Notes:    can only be called from within DOS
  5001.     equivalent to INT 21/AH=3Dh
  5002.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  5003. SeeAlso: AX=1227h,INT 21/AH=3Dh
  5004. --------D-2F1227-----------------------------
  5005. INT 2F U - DOS 3.3+ internal - CLOSE FILE
  5006.     AX = 1227h
  5007.     BX = file handle
  5008.     SS = DOS DS (must be using a DOS internal stack)
  5009. Return: CF set on error
  5010.         AL = 06h invalid file handle
  5011.     CF clear if successful
  5012. Notes:    can only be called from within DOS
  5013.     equivalent to INT 21/AH=3Eh
  5014.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  5015. SeeAlso: AX=1106h,AX=1201h,AX=1226h,INT 21/AH=3Eh
  5016. --------D-2F1228BP4200-----------------------
  5017. INT 2F U - DOS 3.3+ internal - MOVE FILE POINTER
  5018.     AX = 1228h
  5019.     BP = 4200h, 4201h, 4202h (see INT 21/AH=42h)
  5020.     BX = file handle
  5021.     CX:DX = offset in bytes
  5022.     SS = DOS DS (must be using a DOS internal stack)
  5023. Return: as for INT 21/AH=42h
  5024. Notes:    equivalent to INT 21/AH=42h, but may only be called from inside a DOS
  5025.       function call
  5026.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  5027.       LSEEK, and restores frame pointer
  5028.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  5029. SeeAlso: INT 21/AH=42h
  5030. --------D-2F1229-----------------------------
  5031. INT 2F U - DOS 3.3+ internal - READ FROM FILE
  5032.     AX = 1229h
  5033.     BX = file handle
  5034.     CX = number of bytes to read
  5035.     DS:DX -> buffer
  5036.     SS = DOS DS (must be using a DOS internal stack)
  5037. Return: as for INT 21/AH=3Fh
  5038. Notes:    equivalent to INT 21/AH=3Fh, but may only be called when already inside
  5039.       a DOS function call
  5040.     used by NLSFUNC to access COUNTRY.SYS when invoked by the DOS kernel
  5041. SeeAlso: AX=1226h,INT 21/AH=3Fh
  5042. --------D-2F122A-----------------------------
  5043. INT 2F U - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  5044.     AX = 122Ah
  5045.     BX = entry point to set (0001h or 0002h)
  5046.     DS:SI -> FASTOPEN entry point (see #1859,#1860)
  5047.         (entry point not set if SI = FFFFh for DOS 4.0+)
  5048. Return: CF set if specified entry point already set
  5049. Notes:    entry point in BX is ignored under DOS 3.30
  5050.     both entry points set to same handler by DOS 4.01
  5051.     DOS 5.0 and 6.0 only set entry point 1
  5052.  
  5053. (Table 1859)
  5054. Values DOS 3.30+ FASTOPEN entry point is called with:
  5055.     AL = 01h  Lookup
  5056.         CX = ??? seems to be offset
  5057.         DI = ??? seems to be offset
  5058.         SI = offset in DOS DS of filename
  5059.     AL = 02h  insert file into FASTOPEN cache
  5060.     AL = 03h  delete file from FASTOPEN cache
  5061.         SI = offset in DOS DS of filename
  5062.     AL = 04h  purge FASTOPEN cache
  5063.         AH = subfunction (00h,01h,02h)
  5064.         ES:DI -> ???
  5065.         CX = ??? (subfunctions 01h and 02h only)
  5066. Returns: CF set on error or not installed
  5067. Note: function 03h calls function 01h first
  5068. SeeAlso: #1860,#1861
  5069.  
  5070. (Table 1860)
  5071. Values PC-DOS 4.01 FASTOPEN is additionally called with:
  5072.     AL = 04h ???
  5073.         AH = 03h
  5074.         ???
  5075.     AL = 05h ???
  5076.     AL = 0Bh ???
  5077.     AL = 0Ch ???
  5078.     AL = 0Dh ???
  5079.     AL = 0Eh ???
  5080.     AL = 0Fh ???
  5081.     AL = 10h ???
  5082. SeeAlso: #1859,#1861
  5083.  
  5084. (Table 1861)
  5085. Values MS-DOS 5.0-6.0 FASTOPEN is additionally called with:
  5086.     AL = 04h  purge FASTOPEN cache
  5087.         AH = 03h
  5088.         ???
  5089.     AL = 05h ???
  5090.         DL = drive (00h = A:)
  5091.         ???
  5092.     AL = 06h ???
  5093.         ???
  5094. SeeAlso: #1859,#1860
  5095. --------D-2F122B-----------------------------
  5096. INT 2F U - DOS 3.3+ internal - IOCTL
  5097.     AX = 122Bh
  5098.     BP = 44xxh
  5099.     SS = DOS DS (must be using a DOS internal stack)
  5100.     additional registers as appropriate for INT 21/AX=44xxh
  5101. Return: as for INT 21/AH=44h
  5102. Notes:    equivalent to INT 21/AH=44h, but may only be called when already inside
  5103.       a DOS function call
  5104.     sets user stack frame pointer to dummy buffer, moves BP to AX, performs
  5105.       IOCTL, and restores frame pointer
  5106.     used by NLSFUNC in accessing COUNTRY.SYS when invoked by the DOS kernel
  5107. SeeAlso: INT 21/AH=44h
  5108. --------D-2F122C-----------------------------
  5109. INT 2F U - DOS 3.3+ internal - GET DEVICE CHAIN
  5110.     AX = 122Ch
  5111. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  5112. Note:    although this function exists in DR DOS 5.0 and Novell DOS 7, it
  5113.       always returns 0000h:0000h prior to Novell DOS 7 Update 15
  5114. SeeAlso: INT 21/AH=52h
  5115. --------D-2F122D-----------------------------
  5116. INT 2F U - DOS 3.3+ internal - GET EXTENDED ERROR CODE
  5117.     AX = 122Dh
  5118.     SS = DOS DS
  5119. Return: AX = current extended error code
  5120. SeeAlso: AX=1222h,INT 21/AH=59h
  5121. --------D-2F122E-----------------------------
  5122. INT 2F U - DOS 4.0+ internal - GET OR SET ERROR TABLE ADDRESSES
  5123.     AX = 122Eh
  5124.     DL = subfunction
  5125.         00h get standard DOS error table (see #1862)
  5126.         Return: ES:DI -> error table
  5127.                  (DOS 4: errors 00h-12h,50h-5Bh)
  5128.                  (DOS 5: errors 00h-26h,4Fh,51h-59h)
  5129.         01h set standard DOS error table
  5130.         ES:DI -> error table
  5131.         02h get parameter error table (errors 00h-0Ah)
  5132.         Return: ES:DI -> error table
  5133.         03h set parameter error table
  5134.         ES:DI -> error table
  5135.         04h get critical/SHARE error table (errors 13h-2Bh)
  5136.         Return: ES:DI -> error table
  5137.         05h set critical/SHARE error table
  5138.         ES:DI -> error table
  5139.         06h get ??? error table
  5140.         Return: ES:DI -> error table or 0000h:0000h
  5141.         07h set ??? error table
  5142.         ES:DI -> error table
  5143.         08h get error message retriever (see #1863)
  5144.         Return: ES:DI -> FAR procedure to fetch error message
  5145.         09h set ??? error table
  5146.         ES:DI -> error table
  5147. Notes:    if the returned segment on a "get" is 0001h, then the offset specifies
  5148.       the offset of the error message table within COMMAND.COM, and the
  5149.       procedure returned by DL=08h should be called
  5150.     DOS 5+ COMMAND.COM does not allow setting any of the addresses (calls
  5151.       with DL odd are ignored); they are always returned with segment 0001h
  5152.     for DOS 5.0, the standard and critical/SHARE error tables are combined
  5153.       into a single error table
  5154. SeeAlso: AX=0500h,INT 21/AH=59h
  5155.  
  5156. Format of DOS 4.x error table:
  5157. Offset    Size    Description    (Table 1862)
  5158.  00h    BYTE    FFh
  5159.  01h  2 BYTEs    04h,00h (DOS version???)
  5160.  03h    BYTE    number of error headers following
  5161.  04h 2N WORDs    table of all error headers for table
  5162.         Offset    Size    Description
  5163.          00h    WORD    error message number
  5164.          02h    WORD    offset of error message from start of header
  5165.                 error messages are count byte followed by msg
  5166. Note:    DOS 5 error tables consist of one word per error number; each word
  5167.       contains either the offset of a counted string or 0000h
  5168.  
  5169. (Table 1863)
  5170. Call error retrieval function with:
  5171.     AX = error number (see #1864)
  5172.     DI = offset of error table
  5173. Return: ES:DI -> error message (counted string)
  5174. Notes:    this function needs to access COMMAND.COM if the messages were not
  5175.       loaded into memory permanently with /MSG; the caller should assume
  5176.       that the returned message will be overwritten by the next call of
  5177.       the function
  5178.     supported by DR DOS 5.0
  5179.  
  5180. (Table 1864)
  5181. Values for parameter errors:
  5182.  01h    Too many parameters
  5183.  02h    Required Parameter missing
  5184.  03h    Invalid switch
  5185.  04h    Invalid keyword
  5186.  06h    Parameter value not in allowed range
  5187.  07h    Parameter value not allowed
  5188.  08h    Parameter value not allowed
  5189.  09h    Parameter format not correct
  5190.  0Ah    Invalid parameter
  5191.  0Bh    Invalid parameter combination
  5192. --------D-2F122F-----------------------------
  5193. INT 2F U - DOS 4.x internal - SET DOS VERSION NUMBER TO RETURN
  5194.     AX = 122Fh
  5195.     DX = DOS version number (0000h = return true DOS version)
  5196. Note:    not available under DR DOS 5.0 or 6.0
  5197. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  5198. --------m-2F12FFBX0006-----------------------
  5199. INT 2F U - DR DOS 6, Novell DOS 7 - EMM386.EXE - VIDEO MEMORY SPACE CONTROL
  5200.     AX = 12FFh
  5201.     BX = 0006h
  5202.     DX = 0000h
  5203.     CX = function
  5204.         0000h get status of video memory space (MEMMAX /V)
  5205.         0001h map memory into video memory space (MEMMAX +V)
  5206.         0002h unmap memory from video memory space (MEMMAX -V)
  5207. Return: CF clear if successful
  5208.         AX = 0000h (successful)
  5209.         BX = segment of reserved video RAM
  5210.         CX = segment of used video RAM
  5211.         DX = segment of first upper MCB
  5212. Notes:    this functionality is provided by EMM386, and partially supported by
  5213.       HIDOS.SYS
  5214.     BL specifies which program handles the call, BH is the function number
  5215. SeeAlso: AX=D201h/BX=4849h
  5216. --------O-2F12FFBX0007-----------------------
  5217. INT 2F U - Novell DOS 7 - SCRIPT.EXE - GET ???
  5218.     AX = 12FFh
  5219.     BX = 0007h
  5220.     CX = 0000h
  5221. Return: CF clear if installed
  5222.         AX = 0000h
  5223.         BX = ??? (4426h)
  5224.         CX = ??? (0068h)
  5225.         DX = PSP segment of resident code???
  5226.         SI = ??? (4AFAh)
  5227.         ES = resident code segment
  5228. --------m-2F12FFBX0106-----------------------
  5229. INT 2F U - Novell DOS 7 - EMM386.EXE - GET VERSION???
  5230.     AX = 12FFh
  5231.     BX = 0106h
  5232. Return:    CF clear if successful
  5233.         AX = 0000h (successful)
  5234.         BX = EDC0h (signature)
  5235.         CL = memory manager variant (02h,03h)
  5236.         (02h when DPMI/VCPI disabled, 03h when DPMI/VCPI loaded)
  5237.         CH = ??? (00h)
  5238.         DX = version??? (0300h for v3.0)
  5239.         ES = segment of EMM386 low-memory stub
  5240. Notes:    BL specifies which program handles the call, BH is the function number
  5241.     if the word at ES:0012h is nonzero, if contains the offset within
  5242.       segment ES of the CEMM-compatible entry point (see #1865)
  5243.     if no other program has hooked INT 67, an alternate installation
  5244.       check is to test for the string
  5245.       "NOVELL EXPANDED MEMORY MANAGER 386" at offset 14h in the INT 67
  5246.       handler's segment; the word immediately preceding this string
  5247.       contains the offset of the API entry point if it is nonzero
  5248. Index:    entry point;Novell EMM386
  5249.  
  5250. (Table 1865)
  5251. Call Novell EMM386.EXE entry point with:
  5252.     AH = 00h get memory manager's status???
  5253.         ???
  5254.     AH = 01h set memory manager's status???
  5255.         ???
  5256.     AH = 02h Weitek coprocessor support???
  5257.         AL = subfunction???
  5258.     more functions???
  5259. SeeAlso: #0807 at INT 21/AX=4402h/SF=02h,#2796 at INT 67/AX=FFA5h
  5260. --------m-2F12FFBL06-------------------------
  5261. INT 2F U - Novell DOS 7 - EMM386.EXE - ???
  5262.     AX = 12FFh
  5263.     BL = 06h
  5264.     BH = function (02h-09h)
  5265.     ???
  5266. Return: ???
  5267. --------O-2F12FFBX0EDC-----------------------
  5268. INT 2F U - Novell DOS 7 - EMM386.EXE - CHECK IF MULTITASKING SUPPORT LOADED???
  5269.     AX = 12FFh
  5270.     BX = 0EDCh ('EDC' = Novell European Development Center)
  5271. Return: AX = 0000h if ??? loaded
  5272.         CF clear
  5273.         BX = 0000h
  5274. Notes:    called by Novell DOS 7 TaskMgr
  5275.     if this function returns with AX=0000h, then the code necessary to
  5276.       support the API on INT 2F/AX=2780h is loaded and that API becomes
  5277.       available for use
  5278.     because the request is handled on the initial trap to the memory
  5279.       manager caused by INT instructions, this function must be invoked
  5280.       with an actual INT 2F instruction instead of some simulation such
  5281.       as a far call to the address in the interrupt vector table
  5282. SeeAlso: AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h,AX=2780h/CL=04h
  5283. --------D-2F13-------------------------------
  5284. INT 2F U - DOS 3.2+ - SET DISK INTERRUPT HANDLER
  5285.     AH = 13h
  5286.     DS:DX -> interrupt handler disk driver calls on read/write
  5287.     ES:BX = address to restore INT 13 to on system halt (exit from root
  5288.          shell) or warm boot (INT 19)
  5289. Return: DS:DX set by previous invocation of this function
  5290.     ES:BX set by previous invocation of this function
  5291. Notes:    IO.SYS hooks INT 13 and inserts one or more filters ahead of the
  5292.       original INT 13 handler.  The first is for disk change detection
  5293.       on floppy drives, the second is for tracking formatting calls and
  5294.       correcting DMA boundary errors, the third is for working around
  5295.       problems in a particular version of IBM's ROM BIOS
  5296.     before the first call, ES:BX points at the original BIOS INT 13; DS:DX
  5297.       also points there unless IO.SYS has installed a special filter for
  5298.       hard disk reads (on systems with model byte FCh and BIOS date
  5299.       "01/10/84" only), in which case it points at the special filter
  5300.     most DOS 3.2+ disk access is via the vector in DS:DX, although a few
  5301.       functions are still invoked via an INT 13 instruction
  5302.     this is a dangerous security loophole for any virus-monitoring software
  5303.       which does not trap this call ("INT13", "Nomenklatura", and many
  5304.       Bulgarian viruses are known to use it to get the original ROM entry
  5305.       point)
  5306. SeeAlso: INT 13/AH=01h,INT 19,INT 9D"VIRUS"
  5307. --------N-2F13-------------------------------
  5308. INT 2F U - MS-NET - ???
  5309.     AH = 13h
  5310.     ???
  5311. Return: ???
  5312. Note:    supposedly used to move (or control the movement of) NCBs
  5313. --------U-2F1400-----------------------------
  5314. INT 2F C - NLSFUNC.COM - INSTALLATION CHECK
  5315.     AX = 1400h
  5316. Return: AL = 00h not installed, OK to install
  5317.          01h not installed, not OK
  5318.          FFh installed
  5319. Notes:    this function is called by the DOS v3.3+ kernel
  5320.     supported by OS/2 v1.3+ compatibility box, which always returns AL=FFh
  5321.     supported by DR DOS 5.0
  5322.     documented for MS-DOS 5+, but undocumented in prior versions
  5323. SeeAlso: AX=1401h"NLSFUNC",AX=1402h"NLSFUNC"
  5324. --------D-2F1400-----------------------------
  5325. INT 2F - European MS-DOS 4.0 POPUP - "CheckPu" - INSTALLATION CHECK
  5326.     AX = 1400h
  5327. Return: AX = FFFFh if installed
  5328.         BX = maximum memory required to save screen and keyboard info
  5329.     CF clear if successful
  5330.     CF set on error
  5331.         AX = error code
  5332.         0002h invalid function
  5333.         0004h unknown error
  5334. Note:    the POPUP interface is used by background programs (see INT 21/AH=80h)
  5335.       to communicate with the user
  5336. SeeAlso: AX=1401h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  5337. --------U-2F1401-----------------------------
  5338. INT 2F CU - NLSFUNC.COM - CHANGE CODE PAGE
  5339.     AX = 1401h
  5340.     DS:SI -> internal code page structure (see #1866)
  5341.     BX = new code page (see #1040 at INT 21/AX=6602h)
  5342.     DX = country code???
  5343. Return: AL = status
  5344.          00h successful
  5345.          else DOS error code
  5346. Note:    this function is called by the DOS v3.3+ kernel
  5347. SeeAlso: AX=1400h"NLSFUNC",AX=1402h"NLSFUNC",INT 21/AH=66h
  5348.  
  5349. Format of DOS 3.30 internal code page structure:
  5350. Offset    Size    Description    (Table 1866)
  5351.  00h  8 BYTEs    ???
  5352.  08h 64 BYTEs    name of country information file
  5353.  48h    WORD    system code page (see #1040 at INT 21/AX=6602h)
  5354.  4Ah    WORD    number of supported subfunctions
  5355.  4Ch  5 BYTEs    data to return for INT 21/AX=6502h
  5356.  51h  5 BYTEs    data to return for INT 21/AX=6504h
  5357.  56h  5 BYTEs    data to return for INT 21/AX=6505h
  5358.  5Bh  5 BYTEs    data to return for INT 21/AX=6506h
  5359.  60h 41 BYTEs    data to return for INT 21/AX=6501h
  5360. --------D-2F1401-----------------------------
  5361. INT 2F - European MS-DOS 4.0 POPUP - "PostPu" - OPEN/CLOSE POPUP SCREEN
  5362.     AX = 1401h
  5363.     DL = function (00h open, 01h close)
  5364.     DH = wait flag
  5365.         00h block until screen opens
  5366.         01h return error if screen is not available
  5367.         02h urgent--always open screen immediately
  5368. Return: CF clear if successful
  5369.         BX = amount of memory needed to save screen and keyboard info,
  5370.         0000h if default save location can be used (only if DH was 02h)
  5371.     CF set on error
  5372. Note:    the application using the screen is frozen until the popup screen is
  5373.       closed
  5374. SeeAlso: AX=1400h"POPUP",AX=1402h"POPUP",AX=1403h"POPUP"
  5375. --------U-2F1402-----------------------------
  5376. INT 2F CU - NLSFUNC.COM - GET EXTENDED COUNTRY INFO
  5377.     AX = 1402h
  5378.     BP = subfunction (same as AL for INT 21/AH=65h)
  5379.     BX = code page (see #1040 at INT 21/AX=6602h)
  5380.     DX = country code (see #0699 at INT 21/AH=38h)
  5381.     DS:SI -> internal code page structure (see #1866)
  5382.     ES:DI -> user buffer
  5383.     CX = size of user buffer
  5384. Return: AL = status
  5385.         00h successful
  5386.         else DOS error code
  5387. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=65h
  5388.     code page structure apparently only needed for COUNTRY.SYS pathname
  5389. SeeAlso: AX=1401h"NLSFUNC",AX=1403h"NLSFUNC",AX=1404h,INT 21/AH=65h
  5390. --------D-2F1402-----------------------------
  5391. INT 2F - European MS-DOS 4.0 POPUP - "SavePu" - SAVE POPUP SCREEN
  5392.     AX = 1402h
  5393.     ES:DI -> save buffer (0000h:0000h for default buffer in POPUP)
  5394. Return: CF clear if successful
  5395.     CF set on error
  5396.         AX = error code (see #1867)
  5397. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1403h"POPUP"
  5398.  
  5399. (Table 1867)
  5400. Values for POPUP error code:
  5401.  0001h    process does not own screen
  5402.  0004h    unknown error
  5403.  0005h    invalid pointer
  5404. --------U-2F1403-----------------------------
  5405. INT 2F CU - NLSFUNC.COM - SET CODE PAGE
  5406.     AX = 1403h
  5407.     DS:SI -> internal code page structure (see #1866)
  5408.     BX = code page (see #1040 at INT 21/AX=6602h)
  5409.     DX = country code (see #0699 at INT 21/AH=38h)
  5410. Return: AL = status
  5411.          ???
  5412. Note:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  5413. SeeAlso: AX=1402h"NLSFUNC",AX=1404h,INT 21/AH=38h"SET"
  5414. --------D-2F1403-----------------------------
  5415. INT 2F - European MS-DOS 4.0 POPUP - "RestorePu" - RESTORE SCREEN
  5416.     AX = 1403h
  5417.     ES:DI -> buffer containing saved screen
  5418.         (0000h:0000h for default buffer in POPUP)
  5419. Return: CF clear if successful
  5420.     CF set on error
  5421.         AX = error code (see #1867)
  5422. SeeAlso: AX=1400h"POPUP",AX=1401h"POPUP",AX=1402h"POPUP"
  5423. --------U-2F1404-----------------------------
  5424. INT 2F CU - NLSFUNC.COM - GET COUNTRY INFO
  5425.     AX = 1404h
  5426.     BX = code page (see #1040 at INT 21/AX=6602h)
  5427.     DX = country code (see #0699 at INT 21/AH=38h)
  5428.     DS:SI -> internal code page structure (see #1866)
  5429.     ES:DI -> user buffer
  5430. Return: AL = status
  5431.          ???
  5432. Notes:    this function is called by the DOS v3.3+ kernel on INT 21/AH=38h
  5433.     code page structure apparently only needed for COUNTRY.SYS pathname
  5434. SeeAlso: AX=1402h,AX=1403h,INT 21/AH=38h"GET"
  5435. --------U-2F14FE-----------------------------
  5436. INT 2F U - DR DOS 5.0 NLSFUNC - GET EXTENDED COUNTRY INFORMATION
  5437.     AX = 14FEh
  5438.     BX = code page (FFFFh=global code page) (see #1040 at INT 21/AX=6602h)
  5439.     DX = country ID (FFFFh=current country) (see #0699 at INT 21/AH=38h)
  5440.     ES:DI -> country information buffer
  5441.     CL = info ID
  5442.         01h get general internationalization info
  5443.         02h get pointer to uppercase table
  5444.         04h get pointer to filename uppercase table
  5445.         05h get pointer to filename terminator table
  5446.         06h get pointer to collating sequence table
  5447.         07h get pointer to Double-Byte Character Set table
  5448.     CF set (used to return error if not installed)
  5449. Return: CF clear if successful
  5450.         DS:SI -> requested information
  5451.     CF set on error
  5452. Notes:    DR DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  5453.       or FFh on entry.
  5454.     the DR DOS kernel calls this function on INT 21/AX=6501h
  5455.     the value in CL is not range-checked by the DR DOS 5.0 NLSFUNC
  5456. SeeAlso: #1868,AX=14FFh,INT 21/AH=65h
  5457.  
  5458. Format of DR DOS COUNTRY.SYS file:
  5459. Offset    Size    Description    (Table 1868)
  5460.  00h 126 BYTEs    copyright notice (terminated with Ctrl-Z, padded with NULs)
  5461.  7Eh    WORD    signature EDC1h
  5462.  80h    var    country pointer records
  5463.     Offset    Size    Description
  5464.      00h    WORD    country code (0000h if end of array)
  5465.      02h    WORD    code page (see #1040 at INT 21/AX=6602h)
  5466.      04h    WORD    ??? (0000h)
  5467.      06h  7 WORDs    offsets in file for data tables for subfunctions
  5468.               01h-07h
  5469.  var    var    country information
  5470. --------U-2F14FF-----------------------------
  5471. INT 2F U - DR DOS 5.0 NLSFUNC - PREPARE CODE PAGE
  5472.     AX = 14FFh
  5473.     BX = code page (see #1040 at INT 21/AX=6602h)
  5474. Return: AX = ???
  5475.     ZF set if AX=0000h
  5476. Notes:    DR DOS 5.0 NLSFUNC returns CF set and AX=0001h if AL was not 00h, FEh,
  5477.       or FFh on entry.
  5478.     passes codepage preparation request to each character device supporting
  5479.       the generic IOCTL call
  5480. SeeAlso: AX=14FEh,INT 21/AX=440Ch,INT 21/AX=6602h
  5481. --------U-2F1500-----------------------------
  5482. INT 2F - DOS 4.00 GRAPHICS.COM - INSTALLATION CHECK
  5483.     AX = 1500h
  5484. Return: AX = FFFFh
  5485.     ES:DI -> ??? (graphics data?)
  5486. Note:    this installation check conflicts with the CD-ROM Extensions
  5487.       installation check; moved to AX=AC00h in later versions
  5488. SeeAlso: AX=AC00h
  5489. --------d-2F1500BX0000-----------------------
  5490. INT 2F - CD-ROM - INSTALLATION CHECK
  5491.     AX = 1500h
  5492.     BX = 0000h
  5493. Return: BX = number of CD-ROM drive letters used
  5494.     CX = starting drive letter (0=A:)
  5495. Notes:    this installation check DOES NOT follow the format used by other
  5496.       software
  5497.     this installation check conflicts with the DOS 4.00 GRAPHICS.COM
  5498.       installation check
  5499. SeeAlso: AX=150Ch,AX=15FFh,INT 2F/AX=D000h/BX=4D44h"Lotus"
  5500. --------c-2F1500CH90-------------------------
  5501. INT 2F U - CDBLITZ v2.11 - INSTALLATION CHECK
  5502.     AX = 1500h
  5503.     CH = 90h (function number)
  5504.     BX = 1234h (magic value for CDBLITZ)
  5505. Return: CX = 1234h if installed
  5506.         CF clear
  5507.         DX = BCD version number (DH = major, DL = minor)
  5508. Program: CDBLITZ is a CD-ROM cache by Blitz 'n' Software, Inc.
  5509. SeeAlso: AX=1500h/CH=99h
  5510. --------c-2F1500CH91-------------------------
  5511. INT 2F U - CDBLITZ v2.11 - GET STATISTICS
  5512.     AX = 1500h
  5513.     CH = 91h (function number)
  5514.     BX = 1234h (magic value for CDBLITZ)
  5515. Return: CF clear
  5516.     ES:BX -> statistics record (see #1869)
  5517. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=97h
  5518.  
  5519. Format of CDBLITZ statistics record:
  5520. Offset    Size    Description    (Table 1869)
  5521.  00h    WORD    cache mode (see also AX=1500h/CH=94h)
  5522.         0001h 'min', 0002h 'max'
  5523.  02h    DWORD    number of read calls???
  5524.  06h    DWORD    total number of sectors read
  5525.  0Ah    DWORD    unused??? (zero)
  5526.  0Eh    DWORD    number of cache hit sectors
  5527.  12h    WORD    cache size in KB
  5528.  14h    WORD    unused??? (zero)
  5529.  16h    WORD    cache state (0000h disabled, 0001h enabled)
  5530. --------c-2F1500CH92-------------------------
  5531. INT 2F U - CDBLITZ v2.11 - ENABLE CACHE
  5532.     AX = 1500h
  5533.     CH = 92h (function number)
  5534.     BX = 1234h (magic value for CDBLITZ)
  5535. Return: CF clear
  5536. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=93h,AX=1500h/CH=94h
  5537. --------c-2F1500CH93-------------------------
  5538. INT 2F U - CDBLITZ v2.11 - DISABLE CACHE
  5539.     AX = 1500h
  5540.     CH = 93h (function number)
  5541.     BX = 1234h (magic value for CDBLITZ)
  5542. Return: CF clear
  5543. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=92h,AX=1500h/CH=95h
  5544. --------c-2F1500CH94-------------------------
  5545. INT 2F U - CDBLITZ v2.11 - SET 'MAX' MODE (CACHE BOTH DIRECTORIES AND DATA)
  5546.     AX = 1500h
  5547.     CH = 94h (function number)
  5548.     BX = 1234h (magic value for CDBLITZ)
  5549. Return: CF clear
  5550. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=92h,AX=1500h/CH=95h
  5551. --------c-2F1500CH95-------------------------
  5552. INT 2F U - CDBLITZ v2.11 - SET 'MIN' MODE (CACHE ONLY DIRECTORY ENTRIES)
  5553.     AX = 1500h
  5554.     CH = 95h (function number)
  5555.     BX = 1234h (magic value for CDBLITZ)
  5556. Return: CF clear
  5557. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=94h
  5558. --------c-2F1500CH96-------------------------
  5559. INT 2F U - CDBLITZ v2.11 - FLUSH CACHE
  5560.     AX = 1500h
  5561.     CH = 96h (function number)
  5562.     BX = 1234h (magic value for CDBLITZ)
  5563. Return: CF clear
  5564. Note:    this function resets the counts for number of sectors read and number
  5565.       of cache hits, but no other values in the statistics record
  5566.       (see #1869)
  5567. SeeAlso: AX=1500h/CH=90h
  5568. --------c-2F1500CH97-------------------------
  5569. INT 2F U - CDBLITZ v2.11 - GET CACHE STATISTICS
  5570.     AX = 1500h
  5571.     CH = 97h (function number)
  5572.     BX = 1234h (magic value for CDBLITZ)
  5573. Return: CF clear
  5574.     AL = cache mode (01h 'min', 02h 'max') (see also AX=1500h/CH=94h)
  5575.     AH = cache state (00h disabled, 01h enabled)
  5576.     BX = cache size in KB
  5577.     DX:CX = total number of reads
  5578.     DI:SI = number of cache hits
  5579. SeeAlso: AX=1500h/CH=90h,AX=1500h/CH=91h
  5580. --------c-2F1500CH99-------------------------
  5581. INT 2F U - CDBLITZ v2.11 - UNINSTALL
  5582.     AX = 1500h
  5583.     CH = 99h (function number)
  5584.     BX = 1234h (magic value for CDBLITZ)
  5585. Return: CF clear
  5586.     ???
  5587. Program: CDBLITZ is a CD-ROM cache by Blitz 'n' Software, Inc.
  5588. SeeAlso: AX=1500h/CH=90h
  5589. --------d-2F1501-----------------------------
  5590. INT 2F - CD-ROM - GET DRIVE DEVICE LIST
  5591.     AX = 1501h
  5592.     ES:BX -> buffer to hold drive letter list (5 bytes per drive letter)
  5593. Return: buffer filled, for each drive letter
  5594.       BYTE    subunit number in driver
  5595.       DWORD address of device driver header
  5596. Note:    reportedly returns AX=0000h and an invalid address under Windows95
  5597. --------d-2F1502-----------------------------
  5598. INT 2F - CD-ROM - GET COPYRIGHT FILE NAME
  5599.     AX = 1502h
  5600.     ES:BX -> 38-byte buffer for name of copyright file
  5601.     CX = drive number (0=A:)
  5602. Return: CF set if drive is not a CD-ROM drive
  5603.         AX = 000Fh (invalid drive)
  5604.     CF clear if successful
  5605. SeeAlso: AX=1503h
  5606. --------d-2F1503-----------------------------
  5607. INT 2F - CD-ROM - GET ABSTRACT FILE NAME
  5608.     AX = 1503h
  5609.     ES:BX -> 38-byte buffer for name of abstract file
  5610.     CX = drive number (0=A:)
  5611. Return: CF set if drive is not a CD-ROM drive
  5612.         AX = 000Fh (invalid drive)
  5613.     CF clear if successful
  5614. SeeAlso: AX=1502h,AX=1504h
  5615. --------d-2F1504-----------------------------
  5616. INT 2F - CD-ROM - GET BIBLIOGRAPHIC DOC FILE NAME
  5617.     AX = 1504h
  5618.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  5619.     CX = drive number (0=A:)
  5620. Return: CF set if drive is not a CD-ROM drive
  5621.         AX = 000Fh (invalid drive)
  5622.     CF clear if successful
  5623. SeeAlso: AX=1502h,AX=1503h
  5624. --------d-2F1505-----------------------------
  5625. INT 2F - CD-ROM - READ VTOC
  5626.     AX = 1505h
  5627.     ES:BX -> 2048-byte buffer
  5628.     CX = drive number (0=A:)
  5629.     DX = sector index (0=first volume descriptor,1=second,...)
  5630. Return: CF set on error
  5631.         AX = error code (15=invalid drive,21=not ready)
  5632.     CF clear if successful
  5633.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  5634. Note:    This function was not supported by Novell DOS 7 NWCDEX prior to the
  5635.       08/16/94 update
  5636. --------d-2F1506-----------------------------
  5637. INT 2F - CD-ROM - TURN DEBUGGING ON
  5638.     AX = 1506h
  5639.     BX = debugging function to enable
  5640. Note:    reserved for development
  5641. SeeAlso: AX=1507h
  5642. --------d-2F1507-----------------------------
  5643. INT 2F - CD-ROM - TURN DEBUGGING OFF
  5644.     AX = 1507h
  5645.     BX = debugging function to disable
  5646. Note:    reserved for development
  5647. SeeAlso: AX=1506h
  5648. --------d-2F1508-----------------------------
  5649. INT 2F - CD-ROM - ABSOLUTE DISK READ
  5650.     AX = 1508h
  5651.     ES:BX -> buffer
  5652.     CX = drive number (0=A:)
  5653.     SI:DI = starting sector number
  5654.     DX = number of sectors to read
  5655. Return: CF set on error
  5656.         AL = error code (0Fh invalid drive,15h not ready)
  5657.     CF clear if successful
  5658. Note:    reportedly returns error 15h (not ready) under Windows95
  5659. SeeAlso: AX=1509h
  5660. --------d-2F1509-----------------------------
  5661. INT 2F - CD-ROM - ABSOLUTE DISK WRITE
  5662.     AX = 1509h
  5663.     ES:BX -> buffer
  5664.     CX = drive number (0=A:)
  5665.     SI:DI = starting sector number
  5666.     DX = number of sectors to write
  5667. Note:    corresponds to INT 26h and is currently reserved and nonfunctional
  5668. SeeAlso: AX=1508h
  5669. --------d-2F150A-----------------------------
  5670. INT 2F - CD-ROM - RESERVED
  5671.     AX = 150Ah
  5672. --------d-2F150B-----------------------------
  5673. INT 2F - CD-ROM v2.00+ - DRIVE CHECK
  5674.     AX = 150Bh
  5675.     CX = drive number (0=A:)
  5676. Return: BX = ADADh if MSCDEX.EXE installed
  5677.         AX = support status
  5678.         0000h if drive not supported
  5679.         nonzero if supported
  5680. SeeAlso: AX=150Dh
  5681. --------d-2F150C-----------------------------
  5682. INT 2F - CD-ROM v2.00+ - GET MSCDEX.EXE VERSION (GET VERSION)
  5683.     AX = 150Ch
  5684. Return: BH = major version
  5685.     BL = minor version
  5686. Notes:    MSCDEX.EXE versions prior to 2.00 return BX=0000h
  5687.     Corel's CORELCDX.COM v1.01d returns 2.20, v1.12a returns 2.21
  5688.     Meridian Data's CDNETEX.EXE returns its own version number, e.g. 4.70
  5689.     Windows95 returns v2.95
  5690. SeeAlso: AX=1500h
  5691. --------d-2F150D-----------------------------
  5692. INT 2F - CD-ROM v2.00+ - GET CD-ROM DRIVE LETTERS
  5693.     AX = 150Dh
  5694.     ES:BX -> buffer for drive letter list (1 byte per drive)
  5695. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  5696.     to the drive in the same position for function 1501h
  5697. SeeAlso: AX=150Bh
  5698. --------d-2F150E-----------------------------
  5699. INT 2F - CD-ROM v2.00+ - GET/SET VOLUME DESCRIPTOR PREFERENCE
  5700.     AX = 150Eh
  5701.     BX = subfunction
  5702.         00h get preference
  5703.         DX = 0000h
  5704.         Return: DX = preference settings
  5705.         01h set preference
  5706.         DH = volume descriptor preference
  5707.             01h = primary volume descriptor
  5708.             02h = supplementary volume descriptor
  5709.         DL = supplementary volume descriptor preference
  5710.             01h = shift-Kanji
  5711.     CX = drive number (0=A:)
  5712. Return: CF set on error
  5713.         AX = error code (15=invalid drive,1=invalid function)
  5714.     CF clear if successful
  5715. --------d-2F150F-----------------------------
  5716. INT 2F - CD-ROM v2.00+ - GET DIRECTORY ENTRY
  5717.     AX = 150Fh
  5718.     CL = drive number (0=A:)
  5719.     CH bit 0 = copy flag
  5720.         clear if direct copy
  5721.         set if copy to structure which removes ISO/High Sierra diffs
  5722.     ES:BX -> ASCIZ path name
  5723.     SI:DI -> buffer for directory entry (see #1870,#1871)
  5724.          minimum 255 bytes for direct copy
  5725. Return: CF set on error
  5726.         AX = error code
  5727.     CF clear if successful
  5728.         AX = disk format (0=High Sierra,1=ISO 9660)
  5729. Note:    this function was not supported by Novell DOS 7 NWCDEX prior to the
  5730.       08/16/94 update
  5731.  
  5732. Format of CD-ROM directory entry (direct copy):
  5733. Offset    Size    Description    (Table 1870)
  5734.  00h    BYTE  length of directory entry
  5735.  01h    BYTE  length of XAR in Logical Block Numbers
  5736.  02h    DWORD LBN of data, Intel (little-endian) format
  5737.  06h    DWORD LBN of data, Motorola (big-endian) format
  5738.  0Ah    DWORD length of file, Intel format
  5739.  0Eh    DWORD length of file, Motorola format
  5740. ---High Sierra---
  5741.  12h  6 BYTEs date and time
  5742.  18h    BYTE  bit flags
  5743.  19h    BYTE  reserved
  5744. ---ISO 9660---
  5745.  12h  7 BYTEs date and time
  5746.  19h    BYTE  bit flags
  5747. ---both formats---
  5748.  1Ah    BYTE  interleave size
  5749.  1Bh    BYTE  interleave skip factor
  5750.  1Ch    WORD  volume set sequence number, Intel format
  5751.  1Eh    WORD  volume set sequence number, Motorola format
  5752.  20h    BYTE  length of file name
  5753.  21h  N BYTEs file name
  5754.     BYTE (optional) padding if filename is odd length
  5755.       N BYTEs system data
  5756. SeeAlso: #1871
  5757.  
  5758. Format of CD-ROM directory entry (canonicalized):
  5759. Offset    Size    Description    (Table 1871)
  5760.  00h    BYTE    length of XAR in Logical Block Numbers
  5761.  01h    DWORD    Logical Block Number of file start
  5762.  05h    WORD    size of disk in logical blocks
  5763.  07h    DWORD    file length in bytes
  5764.  0Bh  7 BYTEs    date and time
  5765.  12h    BYTE    bit flags
  5766.  13h    BYTE    interleave size
  5767.  14h    BYTE    interleave skip factor
  5768.  15h    WORD    volume set sequence number
  5769.  17h    BYTE    length of file name
  5770.  18h 38 BYTEs    ASCIZ filename
  5771.  3Eh    WORD    file version number
  5772.  40h    BYTE    number of bytes of system use data
  5773.  41h 220 BYTEs    system use data
  5774. SeeAlso: #1870
  5775. --------d-2F1510-----------------------------
  5776. INT 2F - CD-ROM v2.10+ - SEND DEVICE DRIVER REQUEST
  5777.     AX = 1510h
  5778.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  5779.     ES:BX -> CD-ROM device driver request header (see #1845 at AX=0802h)
  5780. Note:    MSCDEX initializes the device driver request header's subunit field
  5781.       based on the drive number specified in CX
  5782. BUG:    Novell DOS 7 NWCDEX prior to the 12/13/94 update did not initialize
  5783.       the subunit field
  5784. --------d-2F15FFBX0000-----------------------
  5785. INT 2F - CD-ROM - CORELCDX - INSTALLATION CHECK
  5786.     AX = 15FFh
  5787.     BX = 0000h
  5788. Return: BX = ABCDh if CORELCDX loaded
  5789. Note:    Corel's CORELCDX.COM is a replacement for MSCDEX.EXE; it also supports
  5790.       the standard MSCDEX installation check calls AX=1500h and AX=150Ch
  5791. SeeAlso: AX=1500h,AX=150Ch
  5792. --------W-2F1600-----------------------------
  5793. INT 2F - MS Windows - WINDOWS ENHANCED MODE INSTALLATION CHECK
  5794.     AX = 1600h
  5795. Return: AL = status
  5796.         00h neither Windows 3.x enhanced mode nor Windows/386 2.x running
  5797.         01h Windows/386 2.x running
  5798.         80h XMS version 1 driver installed (neither Windows 3.x enhanced
  5799.           mode nor Windows/386 2.x running) (obsolete--see note)
  5800.         FFh Windows/386 2.x running
  5801.     AL = anything else
  5802.         AL = Windows major version number >= 3
  5803.         AH = Windows minor version number
  5804. Notes:    INT 2F/AH=16h comprises an API for non-Windows programs (DOS device
  5805.       drivers, TSRs, and applications) to cooperate with multitasking
  5806.       Windows/386 2.x and Windows 3.x and higher enhanced mode.
  5807.     certain calls are also supported in the Microsoft 80286 DOS extender in
  5808.       Windows standard mode
  5809.     this function served as the installation check and AX=1610h served to
  5810.       get the driver entry point for XMS version 1, which is now obsolete.
  5811.       Use AX=4300h and AX=4310h instead
  5812. SeeAlso: AX=160Ah,AX=1610h,AX=4300h,AX=4680h
  5813. Index:    installation check;XMS version 1
  5814. --------W-2F1602-----------------------------
  5815. INT 2F - MS Windows/386 2.x - GET API ENTRY POINT
  5816.     AX = 1602h
  5817. Return: ES:DI -> Windows/386 2.x API procedure entry point
  5818. Notes:    this interface is supported in Windows 3.x only for 2.x compatibility
  5819.     to get the current virtual machine (VM) ID in Windows/386 2.x:
  5820.         AX = 0000h
  5821.         ES:DI -> return address
  5822.         JUMP to address returned from INT 2F/AX=1602h
  5823.     After JUMP, at return address:
  5824.         BX = current VM ID.
  5825. SeeAlso: AX=C020h
  5826. --------W-2F1603-----------------------------
  5827. INT 2F - MS Windows/386 - GET INSTANCE DATA
  5828.     AX = 1603h
  5829. Return: AX = 5248h ('RH') if supported
  5830.         DS:SI -> Windows/386 instance data (see #1872)
  5831. Notes:    reportedly supported by RM Nimbus MS-DOS 3.3 kernel
  5832.     this function is called by DOSMGR when AX=1607h/BX=0015h is not
  5833.       supported, as is the case in DOS versions prior to 5.0
  5834.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  5835.       this function, DOSMGR's behavior, and instancing in general
  5836. SeeAlso: AX=1607h/BX=0015h
  5837.  
  5838. Format of Windows/386 instance data:
  5839. Offset    Size    Description    (Table 1872)
  5840.  00h    WORD    segment of IO.SYS (0000h = default 0070h)
  5841.  02h    WORD    offset in IO.SYS of STACKS data structure (DOS 3.2x)
  5842.         0000h if not applicable
  5843.  04h    WORD    number of instance data entries (max 32)
  5844.  06h    Array of instance data entries
  5845.     Offset    Size    Description
  5846.      00h    WORD    segment (0002h = DOS kernel)
  5847.      02h    WORD    offset
  5848.      04h    WORD    size
  5849. --------W-2F1605-----------------------------
  5850. INT 2F - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX INIT BROADCAST
  5851.     AX = 1605h
  5852.     ES:BX = 0000h:0000h
  5853.     DS:SI = 0000h:0000h
  5854.     CX = 0000h
  5855.     DX = flags
  5856.         bit 0 = 0 if Windows enhanced-mode initialization
  5857.         bit 0 = 1 if Microsoft 286 DOS extender initialization
  5858.         bits 1-15 reserved (undefined)
  5859.     DI = version number (major in upper byte, minor in lower)
  5860. Return: CX = 0000h if okay for Windows to load
  5861.     CX = FFFFh (other registers unchanged) if Windows 3.0 in standard mode
  5862.     CX <> 0 if Windows should not load
  5863.     ES:BX -> startup info structure (see #1873)
  5864.     DS:SI -> virtual86 mode enable/disable callback or 0000h:0000h
  5865.           (see #1876)
  5866. Notes:    the Windows enhanced mode loader and Microsoft 286 DOS extender will
  5867.       broadcast an INT 2F/AX=1605h call when initializing.    Any DOS device
  5868.       driver or TSR can watch for this broadcast and return the appropriate
  5869.       values.  If the driver or TSR returns CX <> 0, it is also its
  5870.       responsibility to display an error message.
  5871.     each handler must first chain to the prior INT 2F handler with
  5872.       registers unchanged before processing the call
  5873.     if the handler requires local data on a per-VM basis, it must store the
  5874.       returned ES:BX in the "next" field of a startup info structure and
  5875.       return a pointer to that structure in ES:BX
  5876.     a single TSR may set the V86 mode enable/disable callback; if DS:SI is
  5877.       already nonzero, the TSR must fail the initialization by setting CX
  5878.       nonzero
  5879.     MSD checks for Windows 3.0 running in standard mode by testing whether
  5880.       CX=FFFFh and other registers are unchanged on return
  5881.     Novell DOS v7.0 (Update 8 - Update 11) TASKMGR in multitasking mode
  5882.       uses this broadcast, even if TASKMGR.INI sets WinPresent= to OFF
  5883.     Micrsoft's EMM386.EXE for DOS 5+ when installed with the NOEMS option
  5884.       changes its driver name from EMMQXXX0 to EMMXXXX0 while Windows is
  5885.       active
  5886. SeeAlso: AX=1606h,AX=1608h,AX=4B05h
  5887.  
  5888. Format of Windows Startup Information Structure:
  5889. Offset    Size    Description    (Table 1873)
  5890.  00h  2 BYTEs    major, minor version of info structure
  5891.  02h    DWORD    pointer to next startup info structure or 0000h:0000h
  5892.  06h    DWORD    pointer to ASCIZ name of virtual device file or 0000h:0000h
  5893.  0Ah    DWORD    virtual device reference data (see #1875)
  5894.         (only used if above nonzero)
  5895.  0Eh    DWORD    pointer to instance data records (see #1874) or 0000h:0000h
  5896.  
  5897. Format of one Instance Item in array:
  5898. Offset    Size    Description    (Table 1874)
  5899.  00h    DWORD    address of instance data (end of array if 0000h:0000h)
  5900.  04h    WORD    size of instance data
  5901.  
  5902. Format of Virtual Device Reference Data:
  5903. Offset    Size    Description    (Table 1875)
  5904.  00h    DWORD    physical address of ??? or 00000000h
  5905.  04h    DWORD    physical address of ??? table
  5906.  08h    DWORD    "DEST_PAGE" address to which pages must be mapped
  5907.  0Ch  N DWORDs    "SRC_PAGE" physical addresses of the pages
  5908.         00000000h = end of table
  5909. Note:    EMM386.EXE sets the first pointer to the start of the device driver
  5910.       chain, the second pointer to a field of 40h bytes followed by a
  5911.       16-bit offset to the end of the SRC_PAGE table, and DEST_PAGE to
  5912.       the start segment of the UMB area
  5913.  
  5914. (Table 1876)
  5915. Values Windows virtual mode enable/disable procedure is called with:
  5916.     AX = 0000h disable V86 mode
  5917.     AX = 0001h enable V86 mode
  5918.     interrupts disabled
  5919. Return: CF set on error
  5920.     CF clear if successful
  5921.     interrupts disabled
  5922. --------W-2F1606-----------------------------
  5923. INT 2F - MS Windows - WINDOWS ENHANCED MODE & 286 DOSX EXIT BROADCAST
  5924.     AX = 1606h
  5925.     DX = flags
  5926.         bit 0 = 0 if Windows enhanced-mode exit
  5927.         bit 0 = 1 if Microsoft 286 DOS extender exit
  5928.         bits 1-15 reserved (undefined)
  5929. Notes:    if the init broadcast fails (AX=1605h returned CX <> 0), then this
  5930.       broadcast will be issued immediately.
  5931.     this call will be issued in real mode
  5932.     Novell DOS v7.0 (Update 8 - Update 10) TASKMGR in multitasking mode
  5933.       uses this broadcast, even if TASKMGR.INI sets WinPresent= to OFF
  5934. SeeAlso: AX=1605h,AX=1609h
  5935. --------W-2F1607-----------------------------
  5936. INT 2F - MS Windows - VIRTUAL DEVICE CALL OUT API
  5937.     AX = 1607h
  5938.     BX = virtual device ID (see #1882)
  5939.     CX = (usually) callout subfunction
  5940. Return: (usually) AX,BX,CX,DX,ES contain results
  5941. Notes:    more of a convention than an API, this call specifies a standard
  5942.       mechanism for Windows enhanced-mode virtual devices (VxD's) to talk
  5943.       to DOS device drivers and TSRs
  5944.     see below for details on several virtual devices
  5945. SeeAlso: AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1607h/BX=0015h
  5946. SeeAlso: AX=1607h/BX=0018h,AX=1684h,AX=C020h
  5947. --------W-2F1607BX0006-----------------------
  5948. INT 2F - MS Windows - "V86MMGR" VIRTUAL DEVICE API
  5949.     AX = 1607h
  5950.     BX = 0006h (VxD identifier of "V86MMGR")
  5951.     CX = 0000h
  5952. Return: AX = status
  5953.         0000h if local A20 state changed
  5954.         1607h if A20 unchanged
  5955.         other if global A20 state changed
  5956. --------W-2F1607BX000C-----------------------
  5957. INT 2F - MS Windows - "VMD" VIRTUAL MOUSE DEVICE API
  5958.     AX = 1607h
  5959.     BX = 000Ch (VxD identifier of "VMD")
  5960. Return: CX = nonzero if mouse driver already virtualized
  5961. Note:    VMD (Virtual Mouse Driver) calls this and then checks whether CX is
  5962.       nonzero; if yes, it will not automatically virtualize the mouse
  5963.       driver.  This would be used if MOUSE.COM already virtualizes
  5964.       itself using the Windows API.
  5965. SeeAlso: AX=1607h/BX=0014h,AX=1607h/BX=0015h
  5966. --------W-2F1607BX0010-----------------------
  5967. INT 2F C - MS Windows 3.1 - "BLOCKDEV" VIRTUAL HARD DISK DEVICE API
  5968.     AX = 1607h
  5969.     BX = 0010h (VxD identifier of "BLOCKDEV")
  5970.     CX = function
  5971.         0001h starting FastDisk compatibility tests
  5972.         0002h ending FastDisk compatibility tests
  5973.         0003h check if FastDisk installation allowed
  5974.         Return: CX = 0000h if allowed
  5975. Note:    this interface is called by the Windows FastDisk driver (such as
  5976.       WDCTRL) when it thinks that the INT 13h handler immediately below
  5977.       IO.SYS's INT 13h code is not in ROM; it should be supported by any
  5978.       program which hooks itself underneath IO.SYS's INT 13h code with
  5979.       INT 2F/AH=13h
  5980. SeeAlso: AX=1607h/BX=0014h,INT 2F/AH=13h
  5981. --------W-2F1607BX0014-----------------------
  5982. INT 2F - MS Windows - "VNETBIOS" VIRTUAL DEVICE API
  5983.     AX = 1607h
  5984.     BX = 0014h (VxD identifier of "VNETBIOS")
  5985. Return: ES:DI -> 128-byte table specifying VNETBIOS actions for each NetBIOS
  5986.         command code (see #1877)
  5987. Note:    VNETBIOS (Virtual NetBIOS) calls this function to determine whether
  5988.       the NetBIOS has an extensions Windows should know about
  5989. SeeAlso: AX=1607h/BX=000Ch,AX=1607h/BX=0010h,AX=1607h/BX=0015h
  5990.  
  5991. (Table 1877)
  5992. Values for VNETBIOS action code:
  5993.  00h    "VN_Unknown" unknown command
  5994.  04h    "VN_No_Map"  no memory mapping necessary
  5995.  08h    "VN_Map_In"  input buffer is quickly used, so no global mapping needed
  5996.  0Ch    "VN_Map_In"  output buffer is quickly used, so no global mapping needed
  5997.  10h    "VN_Map_In_Out"     buffer is quickly used, so no global mapping needed
  5998.  14h    "VN_Chain_Send"     the chain-send command
  5999.  18h    "VN_Cancel"    special case for cancel command
  6000.  1Ch    "VN_Buffer_In"    buffer is incoming
  6001.  20h    "VN_Buffer_Out" buffer is outgoing
  6002.  24h    "VN_Buffer_In_Out" buffer used for both incoming and outgoing data
  6003. --------D-2F1607BX0015-----------------------
  6004. INT 2F C - MS Windows - "DOSMGR" VIRTUAL DEVICE API
  6005.     AX = 1607h
  6006.     BX = 0015h (VxD identifier of "DOSMGR")
  6007.     CX = function
  6008.         0000h query instance processing
  6009.         DX = 0000h
  6010.         Return: CX = state
  6011.                 0000h not instanced
  6012.                 other instanced (DOS 5+ kernel returns 0001h)
  6013.                 DX = segment of DOS drivers or 0000h for
  6014.                     default of 0070h
  6015.                 ES:BX -> patch table (see #1879)
  6016.         0001h set patches in DOS
  6017.         DX = bit mask of patch requests (see #1878)
  6018.         Return: AX = B97Ch
  6019.             BX = bit mask of patches applied (see #1878)
  6020.             DX = A2ABh
  6021.         0002h remove patches in DOS (ignored by DOS 5.0 kernel)
  6022.         DX = bit mask of patch requests (see function 0001h)
  6023.         Return: CX = 0000h (DOS 5-6)
  6024.         Note:    return values are ignored by DOSMGR in Windows 3.1
  6025.         0003h get size of DOS data structures
  6026.         DX = bit mask of request (only one bit can be set)
  6027.             bit 0: Current Directory Structure size
  6028.         Return: if supported request:
  6029.                 AX = B97Ch
  6030.                 CX = size in bytes of requested structure
  6031.                 DX = A2ABh
  6032.             else:
  6033.                 CX = 0000h
  6034.                 all other registers preserved
  6035.         0004h determine instanced data structures
  6036.         Return: AX = B97Ch if supported
  6037.             DX = A2ABh if supported (DOS 5+ kernel returns 0000h)
  6038.             BX = bit mask of instanced items
  6039.                 bit 0: CDS
  6040.                 bit 1: SFT
  6041.                 bit 2: device list
  6042.                 bit 3: DOS swappable data area
  6043.         0005h get device driver size
  6044.         ES = segment of device driver
  6045.         Return: DX:AX = 0000h:0000h on error (not dev. driver segment)
  6046.             DX:AX = A2ABh:B97Ch if successful
  6047.                 BX:CX = size of device driver in bytes
  6048. Notes:    DOSMGR (DOS Manager) will check whether the OEM DOS/BIOS data has
  6049.       been instanced via this API and will not perform its own default
  6050.       instancing of the normal DOS/BIOS data if so; if this API is not
  6051.       supported, DOSMGR will also try to access instancing data through
  6052.       INT 2F/AX=1603h
  6053.     these functions are supported by the DOS 5+ kernel; DOSMGR contains
  6054.       tables of instancing information for earlier versions of DOS
  6055.     see Geoff Chappell's book _DOS_Internals_ for additional discussions of
  6056.       DOSMGR's behavior and instancing in general
  6057. SeeAlso: AX=1603h,AX=1605h,AX=1607h/BX=000Ch,AX=1607h/BX=0014h,AX=1684h
  6058.  
  6059. Bitfields for DOSMGR patch requests:
  6060. Bit(s)    Description    (Table 1878)
  6061.  0    enable critical sections
  6062.  1    NOP setting/checking user ID
  6063.  2    turn INT 21/AH=3Fh on STDIN into polling loop
  6064.  3    trap stack fault in "SYSINIT" to WIN386
  6065.  4    BIOS patch to trap "Insert disk X:" to WIN386
  6066.  
  6067. Format of DOSMGR patch table:
  6068. Offset    Size    Description    (Table 1879)
  6069.  00h  2 BYTEs    DOS version (major, minor)
  6070.  02h    WORD    offset in DOS data segment of "SAVEDS"
  6071.  04h    WORD    offset in DOS data segment of "SAVEBX"
  6072.  06h    WORD    offset in DOS data segment of InDOS flag
  6073.  08h    WORD    offset in DOS data segment of User ID word
  6074.  0Ah    WORD    offset in DOS data segment of "CritPatch" table to enable
  6075.           critical section calls (see INT 2A/AH=80h)
  6076.  0Ch    WORD    (DOS 5+ only) offset in DOS data segment of "UMB_HEAD",
  6077.           containing segment of last MCB in conventional memory
  6078. --------W-2F1607BX0018-----------------------
  6079. INT 2F C - MS Windows - "VMPoll" VIRTUAL DEVICE - IDLE CALLOUT
  6080.     AX = 1607h
  6081.     BX = 0018h (VMPoll VxD ID)
  6082.     CX = 0000h
  6083. Return: AX = status
  6084.         0000h if timeslice used
  6085.         nonzero if timeslice not needed
  6086. Note:    when VMPoll makes this callout, all virtual machines are idle
  6087. SeeAlso: AX=1607h
  6088. --------W-2F1607BX0021--------------------------------------
  6089. INT 2F C - MS Windows - "PageFile" VIRTUAL DEVICE - GET LOCK BYTE
  6090.     AX = 1607h
  6091.     BX = 0021h (PageFile VxD ID)
  6092.     CX = 0000h
  6093. Return: AX = status
  6094.         0000h success
  6095.         ES:DI -> cache lock byte in disk cacher
  6096.         other no disk cache or unsupported
  6097. Notes:    PageFile issues this call on real-mode initialization in order to allow
  6098.       disk caches to provide it with a byte which it can use to temporarily
  6099.       lock the disk cache; VMPOLL also issues this call, so it is made
  6100.       twice each time Windows starts up
  6101.     if this call fails, PageFile falls back to other techniques for locking
  6102.       the disk cache
  6103. SeeAlso: AX=1607h
  6104. --------E-2F1607BX22C0-----------------------
  6105. INT 2F - Rational Systems DOS/4GW - ???
  6106.     AX = 1607h
  6107.     BX = 22C0h
  6108.     ???
  6109. Return: ???
  6110. SeeAlso: INT 15/AX=BF02h,INT 15/AX=BF04h
  6111. --------W-2F1608-----------------------------
  6112. INT 2F C - MS Windows - WINDOWS ENHANCED MODE INIT COMPLETE BROADCAST
  6113.     AX = 1608h
  6114. Notes:    called after all installable devices have been initialized
  6115.     real-mode software may be called between the Windows enhanced-mode init
  6116.       call (AX=1605h) and this call; the software must detect this
  6117.       situation
  6118. SeeAlso: AX=1605h,AX=1609h
  6119. --------W-2F1609-----------------------------
  6120. INT 2F C - MS Windows - WINDOWS ENHANCED MODE BEGIN EXIT BROADCAST
  6121.     AX = 1609h
  6122. Note:    called at the beginning of a normal exit sequence; not made in the
  6123.       event of a fatal system crash
  6124. SeeAlso: AX=1606h,AX=1608h
  6125. --------W-2F160A-----------------------------
  6126. INT 2F - MS Windows 3.1 - IDENTIFY WINDOWS VERSION AND TYPE
  6127.     AX = 160Ah
  6128. Return: AX = 0000h if call supported
  6129.         BX = version (BH=major, BL=minor)
  6130.         CX = mode (0002h = standard, 0003h = enhanced)
  6131. SeeAlso: AX=1600h,AX=4680h
  6132. --------W-2F160B-----------------------------
  6133. INT 2F - MS Windows 3.1 - IDENTIFY TSRs
  6134.     AX = 160Bh
  6135.     ES:DI -> communication structure (see #1880) or 0000h:0000h
  6136. Return: ES:DI -> communication structure
  6137. Desc:    this call allows Windows-aware TSRs to make themselves known to
  6138.       Windows.
  6139. Note:    the TSR should allocate a communication structure, place the given
  6140.       ES:DI pointer in the first field, and return a pointer to the new
  6141.       structure
  6142. SeeAlso: AX=1605h,AX=160Ch,AX=4B01h,AX=4B05h
  6143.  
  6144. Format of TSR-to-Windows communication structure:
  6145. Offset    Size    Description    (Table 1880)
  6146.  00h    DWORD    pointer to next structure
  6147.  04h    WORD    PSP segment
  6148.  06h    WORD    API version ID (0100h)
  6149.  08h    WORD    EXEC flags
  6150.         bit 0: "WINEXEC"
  6151.         bit 1: "LOADLIBRARY"
  6152.         bit 2: "OPENDRIVER"
  6153.  0Ah    WORD    "exec_cmd_show"
  6154.  0Ch    DWORD    "exec_cmd"
  6155.  10h  4 BYTEs    reserved (0)
  6156.  14h    DWORD    pointer to TSR ID block (see #1881)
  6157.  18h    DWORD    pointer to TSR data block or 0000h:0000h
  6158.  
  6159. Format of Norton Utilities 6.0 TSR ID block:
  6160. Offset    Size    Description    (Table 1881)
  6161.  00h    WORD    length of name string
  6162.  02h  N BYTEs    name of TSR's executable
  6163. --------W-2F160C-----------------------------
  6164. INT 2F - MS Windows 3.1 - DETECT ROMs
  6165.     AX = 160Ch
  6166.     ???
  6167. Return: ???
  6168. Note:    used by ROM Windows
  6169. SeeAlso: AX=160Bh
  6170. --------m-2F1610-----------------------------
  6171. INT 2F - XMS v1.x only - GET DRIVER ADDRESS
  6172.     AX = 1610h
  6173.     details unavailable
  6174. Note:    this function and AX=1600h were only used in XMS version 1 and are now
  6175.       obsolete.  Use AX=4300h and AX=4310h instead
  6176. SeeAlso: AX=1600h,AX=4310h
  6177. --------W-2F1680-----------------------------
  6178. INT 2F - MS Windows, DPMI, various - RELEASE CURRENT VIRTUAL MACHINE TIME-SLICE
  6179.     AX = 1680h
  6180. Return: AL = status
  6181.         00h if the call is supported
  6182.         80h (unchanged) if the call is not supported
  6183. Notes:    programs can use this function in idle loops to enhance performance
  6184.       under multitaskers; this call is supported by MS Windows 3.0, DOS 5+,
  6185.       DPMI 1.0+, and in OS/2 2.0+ for multitasking DOS applications
  6186.     does not block the program; it just gives up the remainder of the time
  6187.       slice
  6188.     should not be used by Windows-specific programs
  6189.     when called very often without intermediate screen output under WIN 3+,
  6190.       the VM will go into an idle-state and will not receive the next slice
  6191.       before 8 seconds. This time can be changed in SYSTEM.INI through
  6192.       "IdleVMWakeUpTime=<seconds>". Setting to zero results in a long wait.
  6193. SeeAlso: INT 15/AX=1000h,INT 15/AX=5305h,INT 21/AH=89h,INT 7A/BX=000Ah
  6194. --------W-2F1681-----------------------------
  6195. INT 2F - MS Windows 3+ - BEGIN CRITICAL SECTION
  6196.     AX = 1681h
  6197. Notes:    used to prevent a task switch from occurring
  6198.     should be followed by an INT 2F/AX=1682h call as soon as possible
  6199.     nested calls are allowed, and must be followed by an appropriate number
  6200.       of "end critical section" calls
  6201.     not supported in Windows/386 2.x. Get INDOS flag with INT 21/AH=34h and
  6202.       increment by hand.
  6203. SeeAlso: AX=1682h,INT 15/AX=101Bh,INT 21/AH=34h
  6204. --------W-2F1682-----------------------------
  6205. INT 2F - MS Windows 3+ - END CRITICAL SECTION
  6206.     AX = 1682h
  6207. Notes:    not supported in Windows/386 2.x.  Get InDOS flag with INT 21/AH=34h
  6208.       and decrement by hand, taking care not to decrement InDOS flag
  6209.       through zero
  6210. SeeAlso: AX=1681h,INT 15/AX=101Ch,INT 21/AH=34h
  6211. --------W-2F1683-----------------------------
  6212. INT 2F - MS Windows 3+ - GET CURRENT VIRTUAL MACHINE ID
  6213.     AX = 1683h
  6214. Return: BX = current virtual machine (VM) ID
  6215. Notes:    Windows itself currently runs in VM 1, but this can't be relied upon
  6216.     VM IDs are reused when VMs are destroyed
  6217.     an ID of 0 will never be returned
  6218. SeeAlso: AX=1684h,AX=1685h,AX=168Bh
  6219. --------W-2F1684-----------------------------
  6220. INT 2F - MS Windows - GET DEVICE API ENTRY POINT
  6221.     AX = 1684h
  6222.     BX = virtual device (VxD) ID (see #1882)
  6223.     ES:DI = 0000h:0000h
  6224. Return: ES:DI -> VxD API entry point, or 0:0 if the VxD does not support an API
  6225. Note:    some Windows enhanced-mode virtual devices provide services that
  6226.       applications can access.  For example, the Virtual Display Device
  6227.       (VDD) provides an API used in turn by WINOLDAP.
  6228. SeeAlso: AX=1683h
  6229.  
  6230. (Table 1882)
  6231. Values for MS Windows VxD ID:
  6232. Value    Name   CallOut V86 PM    Description
  6233.  0000h    LPT        N    N  N    DOS386 LPT Device (Windows for Workgroups 3.11)
  6234.  0000h    MSODISUP    N    N  N    MS ODI Support (Windows for Workgroups 3.11)
  6235.  0000h    NWNBLINK    N    N  N    Netware NetBIOS (Windows for Workgroups 3.11)
  6236.  0000h    SERIAL        N    N  N    DOS386 Serial Device (Windows for Workgrp 3.11)
  6237.  0001h    VMM        N  N    Virtual Machine Manager
  6238.  0002h    Debug
  6239.  0003h    VPICD        Y  Y    Virtual Prog. Interrupt Controller (PIC) Device
  6240.  0004h    VDMAD        N  N    Virtual Direct Memory Access (DMA) Device
  6241.  0005h    VTD        Y  Y    Virtual Timer Device
  6242.  0006h    V86MMGR        Y    N  N    Virtual 8086 Mode Device
  6243.  0007h    PageSwap    N  N    Paging Device
  6244.  0008h    Parity        N  N    Parity-check trapper
  6245.  0009h    Reboot        N  Y    Ctrl-Alt-Del handler
  6246.  000Ah    VDD        N  Y    Virtual Display Device (GRABBER)
  6247.  000Bh    VSD        N  N    Virtual Sound Device
  6248.  000Ch    VMD        Y    Y  Y    Virtual Mouse Device
  6249.  000Dh    VKD        N  Y    Virtual Keyboard Device
  6250.  000Eh    VCD        N  Y    Virtual COMM Device
  6251.  000Fh    VPD            Virtual Printer Device
  6252.  0010h    VHD            Virtual Hard Disk Device (Windows 3.0)
  6253.  0010h    BLOCKDEV    N  N    Virtual Hard Disk Device (Windows 3.1)
  6254.  0010h    IOS        N    N  N    DOS386 IOS Device (Windows for Workgroups 3.11)
  6255.  0010h    IOS        N  Y    (Chicago)
  6256.  0011h    VMCPD        Y  Y    Virtual Math CoProcessor Device
  6257.  0012h    EBIOS        N  N    Reserve EBIOS page (e.g., on PS/2)
  6258.  0013h    BIOSXLAT    N  N    Map ROM BIOS API between prot & V86 mode
  6259.  0014h    VNETBIOS    Y    N  N    Virtual NetBIOS Device
  6260.  0015h    DOSMGR        Y    Y  N    DOS data instancing (see #1885)
  6261.  0016h    WINLOAD
  6262.  0017h    SHELL        N  Y
  6263.  0018h    VMPOLL        N  N
  6264.  0019h    VPROD
  6265.  001Ah    DOSNET        N  N    assures network integrity across VMs
  6266.  001Ah    VNETWARE    Y  Y    Novell NetWare DOSNET replacement
  6267.  001Bh    VFD        N  N    Virtual Floppy Device
  6268.  001Ch    VDD2            Secondary display adapter
  6269.  001Ch    LoadHi        N  N    Netroom LoadHi Device (RMLODHI.VXD)
  6270.  001Ch    LoadHi        N  N    386MAX LoadHi Device (386MAX.VXD)
  6271.  001Ch    LoadHi        N  N    Win386 LoadHi Device (EMM386.EXE)
  6272.  001Dh    WINDEBUG    N  Y
  6273.  001Dh    TDDebug        N  Y
  6274.  001Eh    TSRLoad            TSR instance utility
  6275.  001Fh    BiosHook        BIOS interrupt hooker VxD
  6276.  0020h    Int13        N    N  N
  6277.  0021h    PageFile    N  Y    Paging File device
  6278.  0022h    SCSI
  6279.  0023h    MCA_POS            Microchannel Programmable Option Select
  6280.  0024h    SCSIFD            SCSI FastDisk device
  6281.  0025h    VPEND            Pen device
  6282.  0026h    APM            Advanced Power Management
  6283.  0027h    VXDLDR         N    Y  Y    VXDLDR (Windows for Workgroups 3.11)
  6284.  0028h    NDIS         N    Y  Y    Network Driver Interface Specification
  6285.                   (Windows for Workgroups 3.11)
  6286.  002Ah    VWIN32        N  Y    (Chicago)
  6287.  002Bh    VCOMM         N    Y  Y    DOS386 VCOMM Device (Windows for Workgrps 3.11)
  6288.  002Dh    W32S         Y    N  Y    WIN32s 32-bit extension to Windows API
  6289.  0030h    MACH32         N    N  Y    ATI Mach32 video card
  6290.  0031h    NETBEUI         N    N  N    NETBEUI (Windows for Workgroups 3.11)
  6291.  0032h    SERVER         N    Y  Y    Int21 File Server (Windows for Workgroups 3.11)
  6292.  0033h    CONFIGMG    Y  Y    (Chicago)
  6293.  0033h    EDOS        N  N    Windows DOS Box Enhancer by Mom's Software
  6294.  0034h    DWCFGMG.SYS        Plug-and-Play configuration manager
  6295.  0036h    VFBACKUP    Y  Y    (Chicago)
  6296.  0038h    VCOND        Y  Y    (Chicago)
  6297.  003Ah    VPMTD         N    N  Y    IFAX Scheduler Device (Windows for Workgr 3.11)
  6298.  003Bh    DSVXD        Y  N    DoubleSpace VxD from MS-DOS v6.x
  6299.  0051h    ISAPNP        N  N
  6300.  008Dh    ESDI_506    N  N    (Chicago)
  6301.  0090h    voltrack    N  N
  6302.  00FDh    FAKEIDE        N  N    (Chicago)
  6303.  0102h    CV1        N  N    Microsoft C/C++ 7.00+ CodeView for Windows
  6304.  0200h    VIPX        Y  Y    NetWare Virtual IPX Driver
  6305.  0201h    VNWLSERV    N  N    NetWare Lite 1.1 Server (SERVER.EXE)
  6306.  0202h    WINICE        Y  Y    SoftICE/W
  6307.  0203h    VCLIENT        N  Y    NetWare Lite 1.1+ Client
  6308.  0205h    VCAFT        N  N    Novell Virtual CAFT Driver (LANalyzer for Win)
  6309.  0205h    BCW        Y  Y    Nu-Mega Bounds Checker for Windows
  6310.  0206h    VTXRX        N  N    Novell Virtual TXRX Driver (LANalyzer for Win)
  6311.  0207h    DPMS         N    Y  N    Novell DOS Protected Mode Services
  6312.  0234h    VCOMMUTE    Y  Y    PC Tools Commute
  6313.  0442h    VTDAPI        N  Y    MMSys Win386 VTAPI Device
  6314.  0444h    VADMAD            Autoinitialize DMA (Windows 3.0)
  6315.  0445h    VSBD        Y  Y    WinResKit: Sound Blaster Device
  6316.  0446h    VADLIBD         Y    Y  Y    MMSys Win386 AdLib Device (v3.x)
  6317.  045Dh    VflatD        N  Y    dva.386, part of WIN32s
  6318.  0460h    UNIMODEM    N  Y
  6319.  0480h    VNetSup         N    Y  Y    Virtual Net Support (Windows for Workgrps 3.11)
  6320.  0481h    VRedir         N    N  N    Redirector File System Driver
  6321.                   (Windows for Workgroups 3.11)
  6322.  0482h    VBrowse        Y  Y    Win386 Virtual Browser
  6323.  0483h    VSHARE        N  N    Windows for Workgroups Virtual SHARE
  6324.  0484h    IFSMgr         Y    Y  N    Installable File System Manager
  6325.                   (Windows for Workgroups 3.11)
  6326.  0486h    VFAT         N    Y  Y    Win386 HPFS Driver (Windows for Workgrps 3.11)
  6327.  0487h    NWLINK        Y  Y    Win386 Virtual Packet Exchange Protocol
  6328.  0487h    NWSUP         Y    N  N    NetWare Vnetbios shim
  6329.  048Bh    VCache         N    Y  Y    Virtual File Cache (Windows for Workgrps 3.11)
  6330.  048Bh    VCACHE        Y  Y
  6331.  048Dh    RASMAC        Y  Y    enhanced mode Win4Workgroups RASMAC device
  6332.  1020h    VCV            Microsoft C/C++ 7.00 CodeView
  6333.  1021h    VMB        Y  Y    Microsoft C/C++ 7.00 WXSRVR
  6334.  1022h    Vpfd        Y  Y    Microsoft C/C++ 7.00
  6335.  1025h    MMD        Y  Y    Microsoft C/C++ 8.00, Visual C/C++ 1.00
  6336.  2020h    PIPE        Y  Y    by Thomas W. Olson, in Windows/DOS DevJrn 5/92
  6337.  21EAh    VADLIBWD    N  Y    Adlib Waveform Driver by John Ridges
  6338.  2200h    VFINTD        Y  Y    Norton VFINTD (Norton Desktop)
  6339.  22C0h    ???        Y        Rational Systems DOS/4GW ???
  6340.  2402h    ZMAX        N  N    Qualitas 386MAX v7 DOSMAX handler
  6341.  24A0h    VNSS        N  Y    Norton Screen Saver (Norton Desktop)
  6342.  24A1h    VNDWD        Y  Y    Norton VNDWD Device (Norton Desktop)
  6343.  24A2h    SYMEvent    Y  Y    Norton Utilities v8
  6344.  2540h    VILD        Y  N    INTERLNK client from MS-DOS v6.x
  6345.  2640h    VASBID        N  Y    WinResKit: Artisoft Sounding Board Device
  6346.  2860h    COMMTASK    N    N  Y    Windows 386-mode preemptive tasker by James
  6347.                   A. Kenemuth of Interabang Computing
  6348.  28A0h    PHARLAPX    Y    PharLap inter-VM communications DLL
  6349.  28A1h    PharLap        Y    Y  Y    PharLap 386|DOS-Extender DOSXNT.386
  6350.  28C0h    VXD        N    Y  Y    Generic VxD for real and protected mode by
  6351.                   Andrew Schulman in MSJ February 1993
  6352.  28C1h    PUSHKEYS        VKD_Force_Keys device
  6353.  28C2h    VCR3D            Virtual CR3, by A.Schulman in MSJ October 1992
  6354.  2925h    EDOS        Y  Y    Enhanced DOS by Firefly Software
  6355.  292Dh    VSBPD        Y  Y    Sound Blaster Pro
  6356.  304Ch    DWCFGMG.SYS        Plug-and-Play configuration access
  6357.  3098h    VstlthD        N    N  N    for QEMM Stealth ROM mode
  6358.  310Eh    WPS        N  Y    MS DevNet CD-ROM: Windows Process Status
  6359.  313Bh    PMC            Power Management Coordinator
  6360.  32CBh    VFRAD        Y  Y    Dr.Franz - Simultan's diagnotics VFRAD.386
  6361.  36AEh    AIB-PC.386    Y  Y    Sunset Laboratory interface hardware driver
  6362.  4321h    POSTMSG        Y  Y    (see #1906)
  6363.  7A5Fh    SIWVID        Y    Y  Y    Soft-ICE for Windows video driver
  6364.  7FE0h    VSWITCHD    Y  N    by Jeff Prosise
  6365.  7FE0h    VWFD        N    Y  Y    reports windowed/fullscreen state; by Neil
  6366.                   Sandlin of Microsoft, shipped with ANSIPLUS
  6367.  7FE1h    VWATCHD        N    Y  Y    basic driver w/ no functionality except tracing
  6368.                   by Keith Jin of Microsoft PSS
  6369.  7FE5h    VFINTD        N    Y  Y    Virtual Floppy Interrupt trapper by Neil
  6370.                   Sandlin of Microsoft
  6371.  7FE7h    VMPAGES        N    Y  Y    demonstration of exporting VxD services, by
  6372.                   Neil Sandlin of Microsoft
  6373.  7FE8h    VPOSTD        Y  Y    PostMessage() demo by Curtis J. Palmer of MS
  6374.  7FE9h    VIdleD        N    N  N    demonstration of Call_When_Idle function, by
  6375.                   Bernie McIlroy of Microsoft
  6376.  7FEBh    VMIOD        N    N  N    Virtual Monitor I/O Traffic Device, by Neil
  6377.                   Sandlin of Microsoft
  6378.  7FEDh    VMIRQD        N    N  N    Virtual Monitor IRQ Traffic Device, by Neil
  6379.                   Sandlin of Microsoft
  6380.  8888h    VbillD            Bill Potvin II's for reversing Compaq LTE video
  6381.  EEEEh    VEPSD        N  N    Virtual Extended Paging Services for
  6382.                   Borland C++ v4.0
  6383. Note:    The high bit of the VxD ID is reserved for future use. Originally,
  6384.     the next 10 bits were the OEM number which was assigned by Microsoft,
  6385.     and the low 5 bits were the device number.  Currently, Microsoft
  6386.     assigns VxD IDs individually for each driver; send blank email to
  6387.     vxdid@microsoft.com for more information.
  6388. --------W-2F1684BX0003-----------------------
  6389. INT 2F - MS Windows - VPICD - GET DEVICE API ENTRY POINT
  6390.     AX = 1684h
  6391.     BX = 0003h (virtual device ID for VPICD device) (see #1882)
  6392.     ES:DI = 0000h:0000h
  6393. Return: ES:DI -> VxD API entry point
  6394.           0000h:0000h if the VxD does not support an API
  6395. --------W-2F1684BX0005-----------------------
  6396. INT 2F - MS Windows - VTD - GET DEVICE API ENTRY POINT
  6397.     AX = 1684h
  6398.     BX = 0005h (virtual device ID for VTD device) (see #1882)
  6399.     ES:DI = 0000h:0000h
  6400. Return: ES:DI -> VxD API entry point (see #1883)
  6401.           0000h:0000h if the VxD does not support an API
  6402.  
  6403. (Table 1883)
  6404. Call VTD.386 entry point with:
  6405.     AX = function number
  6406.         0000h get VTD version number
  6407.         Return: AH = major version
  6408.             AL = minor version
  6409.         0100h get current clock tick time
  6410.         Return: EDX:EAX = clock tick time in 840ns units since Windows
  6411.                   was started
  6412.         0101h get current system time in milliseconds
  6413.         Return: EAX = time in milliseconds that Windows has been
  6414.                   running
  6415.         0102h get current virtual machine time
  6416.         Return: EAX = cumulative amount of time the virtual machine has
  6417.                   been active, in milliseconds
  6418. Note:    this entry point should only be called directly when TOOLHELP.DLL
  6419.       TimerCount() cannot be called
  6420. SeeAlso: #0629,#0631,#0630 at INT 20"Windows"
  6421. --------W-2F1684BX0009-----------------------
  6422. INT 2F - MS Windows - REBOOT - GET DEVICE API ENTRY POINT
  6423.     AX = 1684h
  6424.     BX = 0009h (virtual device ID for REBOOT device) (see #1882)
  6425.     ES:DI = 0000h:0000h
  6426. Return: ES:DI -> VxD API entry point (see #1884)
  6427.           0000h:0000h if the VxD does not support an API
  6428. SeeAlso: INT 14/AH=17h"FOSSIL",INT 16/AX=E0FFh
  6429.  
  6430. (Table 1884)
  6431. Call REBOOT protected-mode entry point with:
  6432.     AX = function
  6433.         0100h warm boot
  6434.         Return: never
  6435.         Note:    broadcasts "Reboot_Processor" message, which is caught
  6436.               by the VKD device
  6437.         0201h set KERNEL Ctrl-Alt-Del handler
  6438.         ES:DI -> new Ctrl-Alt-Del handler
  6439.         DS:SI -> KERNEL reboot sanity check byte
  6440.         Return: CF clear
  6441.         Notes:    if an application installs its own handler and then
  6442.               chains to Windows' handler, Windows will no longer
  6443.               be able to detect hung applications, and will always
  6444.               produce an "Application not responding" dialog
  6445.             DS must contain a writable, fixed selector because
  6446.               the provided address is converted to a linear address
  6447.               before being stored
  6448.             when Ctrl-Alt-Del is pressed in the system VM, Reboot
  6449.               sets the sanity check byte to zero, schedules a
  6450.               750ms wait, and then tests whether the check byte is
  6451.               still zero; if not, it displays a message that there
  6452.               is no hung application and then exits
  6453.         0202h get KERNEL Ctrl-Alt-Del handler
  6454.         Return: CF clear
  6455.             ES:DI -> current Ctrl-Alt-Del handler
  6456.         Note:    the default handler is located in KERNEL
  6457.         0203h display "Application not responding" dialog box
  6458.         ES:DI -> ASCIZ name of hung application
  6459.         Return: never if user pressed Ctrl-Alt-Del a second time
  6460.             CF clear
  6461.             AX = result
  6462.                 0000h user pressed Esc
  6463.                 0001h user pressed Enter
  6464.         Note:    this function is used by the default Windows
  6465.               Ctrl-Alt-Del handler
  6466.         0204h set/reset protected-mode INT 01 handler
  6467.         CX:EDX -> new protected-mode INT 01 handler
  6468.         CX = 0000h restore protected-mode INT 01 handler
  6469.         Return: CF clear
  6470.         Notes:    if CX is nonzero, the current handler address is saved
  6471.               internally before the new handler is set; this saved
  6472.               address is then used when CX is zero on entry
  6473.             used by Windows' default Ctrl-Alt-Del handler; actual
  6474.               fatal exit to DOS will be done on next INT 01
  6475.         Warning: opened files are not closed and remain open as
  6476.               orphaned files in DOS
  6477. Note:    functions 0201h and 0203h are not useful outside the system VM
  6478. SeeAlso: #0632,#0633
  6479. --------W-2F1684BX000C-----------------------
  6480. INT 2F - MS Windows - VMD - GET DEVICE API ENTRY POINT
  6481.     AX = 1684h
  6482.     BX = 000Ch (virtual device ID for VMD device) (see #1882)
  6483.     ES:DI = 0000h:0000h
  6484. Return: ES:DI -> VxD API entry point
  6485.           0000h:0000h if the VxD does not support an API
  6486. --------W-2F1684BX0015-----------------------
  6487. INT 2F - MS Windows - DOSMGR - GET DEVICE API ENTRY POINT
  6488.     AX = 1684h
  6489.     BX = 0015h (virtual device ID for DOSMGR device) (see #1882)
  6490.     ES:DI = 0000h:0000h
  6491. Return: ES:DI -> VxD API entry point (see #1885,#0641)
  6492.           0000h:0000h if the VxD does not support an API
  6493.  
  6494. (Table 1885)
  6495. Call DOSMGR entry point with:
  6496.     AX = 0000h get DOSMGR version
  6497.         Return: CF clear
  6498.             AX = version (AH = major, AL = minor)
  6499.     AX = 0001h set critical focus
  6500.         Return: CF clear
  6501.     AX = 0002h crash current virtual machine
  6502.         Return: never
  6503.         Note:   displays message box stating that "application has been
  6504.               stopped by the DOSMGR device"
  6505.     AX = 0003h enter critical section
  6506.         Note:   this function assumes that the code for INT 2A/AX=8001h
  6507.               and INT 2A/AX=8002h have been modified for Windows
  6508.     AX = 0004h get VM ID byte
  6509.         Return: CF clear if successful
  6510.             ES:DI -> VM ID byte
  6511.             CF set on error
  6512.         Note:   this function fails if the INT 2A modifications have not
  6513.               yet been applied
  6514.     AX = 0005h inform Windows of possible media change
  6515.         BL = drive number (00h=A:)
  6516.         Return: CF clear if successful
  6517.             CF set on error
  6518. SeeAlso: #0641 at INT 20"Windows"
  6519. --------W-2F1684BX0017-----------------------
  6520. INT 2F U - MS Windows - SHELL - GET DEVICE API ENTRY POINT
  6521.     AX = 1684h
  6522.     BX = 0017h (virtual device ID for SHELL device) (see #1882)
  6523.     ES:DI = 0000h:0000h
  6524. Return: ES:DI -> VxD API entry point (see #1886)
  6525.           0000h:0000h if the VxD does not support an API
  6526. SeeAlso: AX=1684h/BX=0021h
  6527.  
  6528. (Table 1886)
  6529. Call SHELL entry point with:
  6530.     EDX = function number (0000h-0016h, mostly unknown)
  6531.         0000h get version number
  6532.         Return: AX = version number
  6533.             EBX = system VM handle
  6534.         0001h "SHELL_Get_SYSVM_Info" get system VM information
  6535.         Return: CF clear
  6536.             AX bit 0 set if system VM executing exclusively
  6537.             BX = background time slice priority
  6538.             CX = foreground time slice priority
  6539.             SI = minimum time slice in milliseconds
  6540.         0002h "SHELL_Set_SYSVM_Info" set system VM information
  6541.         AX bit 0 set if system VM should execute exclusively (ignored?)
  6542.         BX = background time slice priority (1-10000)
  6543.         CX = foreground time slice priority (1-10000)
  6544.         SI = minimum time slice in milliseconds (1-10000)
  6545.         Return: CF clear if successful
  6546.         0003h "SHELL_Crt_VM" create a virtual machine
  6547.         ES:EDI -> SEB structure (see #1887)
  6548.         Return: CF clear if successful
  6549.                EAX = VM handle
  6550.             CF set on error
  6551.                EDX,EAX = result from GetSetDetailedVMError()
  6552.         0004h "SHELL_Destroy_VM" destroy a virtual machine
  6553.         EBX = VM handle (not system VM)
  6554.         Return: nothing
  6555.         0005h "SHELL_Set_Focus"
  6556.         EBX = VM handle
  6557.         ECX = ???
  6558.         Return: nothing
  6559.         0006h "SHELL_Get_VM_State"
  6560.         EBX = VM handle (not system VM)
  6561.         ES:EDI -> ??? structure
  6562.         Return: CF clear if successful
  6563.         0007h "SHELL_Set_VM_State"
  6564.         EBX = VM handle (not system VM)
  6565.         ES:EDI -> ??? structure
  6566.         0008h "SHELL_Debug_Out"
  6567.         ???
  6568.         Return: ???
  6569.         Note:    dummy function in retail version of MS Windows
  6570.         0009h "SHELL_VMDA_Init"
  6571.         ???
  6572.         Return: ???
  6573.         000Ah "SHELL_VMDA_Exit"
  6574.         ???
  6575.         Return: ???
  6576.         000Bh "SHELL_Get_Message_Txt"
  6577.         ???
  6578.         Return: ???
  6579.         000Ch "SHELL_Event_Complete"
  6580.         ???
  6581.         Return: ???
  6582.         000Dh "SHELL_Get_Contention_Info"
  6583.         ???
  6584.         Return: ???
  6585.         000Eh "SHELL_Get_Clip_Info"
  6586.         ???
  6587.         Return: ???
  6588.         000Fh "SHELL_Set_Paste"
  6589.         ???
  6590.         Return: ???
  6591.         0010h "SHELL_Switcher_Assist"
  6592.         ???
  6593.         Return: ???
  6594.         0011h "SHELL_Get_FileSysChng"
  6595.         ???
  6596.         Return: ???
  6597.         0012h "SHELL_Query_Destroy"
  6598.         ???
  6599.         Return: ???
  6600.         0013h "SHELL_SetFocus_Cur_VM" set input focus to current VM
  6601.         ???
  6602.         Return: ???
  6603.         0014h "SHELL_User_Busy_API"
  6604.         ???
  6605.         Return: ???
  6606.         0015h "SHELL_Chng_Hot_Key"
  6607.         ???
  6608.         Return: ???
  6609.         0016h "SHELL_Get_TermInfo"
  6610.         ???
  6611.         Return: ???
  6612. Return: CF set if called from VM other than system VM
  6613.         EAX = FFFFFFFFh
  6614. Note:    except for function 0013h, this API may only be called from the system
  6615.       VM
  6616. SeeAlso: #0642 at INT 20"Windows"
  6617.  
  6618. Format of Shell Execution Block (SEB):
  6619. Offset    Size    Description    (Table 1887)
  6620.  00h    DWORD    PIF flags (see #1888)
  6621.  04h    DWORD    display flags (see #1889)
  6622.  08h    PWORD    -> pathname of .EXE to run
  6623.  0Eh    PWORD    -> argument list
  6624.  14h    PWORD    -> working drive/directory
  6625.  1Ah    WORD    desired number of V86 pages for virtual machine
  6626.  1Ch    WORD    minimum number of V86 pages for VM
  6627.  1Eh    WORD    foreground priority
  6628.  20h    WORD    background priority
  6629.  22h    WORD    maximum KB of EMS
  6630.  24h    WORD    minimum KB of EMS
  6631.  26h    WORD    maximum KB of XMS
  6632.  28h    WORD    minimum KB of XMS
  6633.  2Ah    WORD    ???
  6634.  2Ch    WORD    ???
  6635.  2Eh 128 BYTEs    title
  6636. Note:    the PWORDs at offsets 08h,0Eh, and 14h consist of a DWORD offset
  6637.       followed by a WORD selector
  6638.  
  6639. Bitfields for 386 Enhanced Mode PIF flags:
  6640. Bit(s)    Description    (Table 1888)
  6641.  0    exclusive use of processor when VM is fullscreen
  6642.  1    VM runs in background
  6643.  2    VM runs in window
  6644.  3-4    ???
  6645.  5    Alt-Tab reserved
  6646.  6    Alt-Esc reserved
  6647.  7    Alt-Space reserved
  6648.  8    Alt-Enter reserved
  6649.  9    Alt-PrtSc reserved
  6650.  10    PrtSc reserved
  6651.  11    Ctrl-Esc reserved
  6652.  12    VM will release idle time slice
  6653.  13    VM not allowed to use high mem
  6654.  14    unknown
  6655.  15    VM expanded mem not pageable
  6656.  16    VM extended mem not pageable
  6657.  17    Fast paste from clipboard enabled
  6658.  18    VM app memory not pageable
  6659.  30    Close VM when app exits
  6660.  
  6661. Bitfields for SHELL display options:
  6662. Bit(s)    Description    (Table 1889)
  6663.  0    emulate text mode
  6664.  1    monitor text port
  6665.  2    monitor low graphics port
  6666.  3    monitor high graphics port
  6667.  7    Retain video memory
  6668. --------W-2F1684BX0021-----------------------
  6669. INT 2F U - MS Windows - PAGEFILE - GET DEVICE API ENTRY POINT
  6670.     AX = 1684h
  6671.     BX = 0021h (virtual device ID for PAGEFILE device) (see #1882)
  6672.     ES:DI = 0000h:0000h
  6673. Return: ES:DI -> VxD API entry point (see #1890)
  6674.           0000h:0000h if the VxD does not support an API
  6675. SeeAlso: AX=1684h/BX=0017h
  6676.  
  6677. (Table 1890)
  6678. Call PAGEFILE entry point with:
  6679.     AX = function
  6680.         0000h get version
  6681.         Return: CF clear
  6682.             AX = version (AH = major, AL = minor)
  6683.         0001h get swap file info
  6684.         DS:SI -> 128-byte buffer for swap file full pathname
  6685.         DS:DI -> 128-byte buffer for SPART.PAR full pathname
  6686.         Return: CF clear
  6687.             AL = pager type (see #1891)
  6688.             AH = flags
  6689.                 bit 7: swap file corrupted
  6690.             ECX = maximum size of swap file
  6691.             DS:SI buffer filled if paging enabled
  6692.             DS:DI buffer filled if permanent swap file
  6693.         0002h delete permanent swap file on exit
  6694.         Return: CF clear
  6695.         0003h get current temporary swap file size
  6696.         Return: CF clear
  6697.             DX:AX = current swap file size in bytes
  6698.                 0000h:0000h if permanent swap file
  6699. Note:    this API is only available in protected mode, and may only be called
  6700.       from the system VM
  6701. SeeAlso: #0646 at INT 20"Windows"
  6702.  
  6703. (Table 1891)
  6704. Values for MS Windows PAGEFILE pager type:
  6705.  00h    paging disabled
  6706.  01h    MSDOS
  6707.  02h    BIOS
  6708.  03h    32-bit disk access
  6709. SeeAlso: #1890
  6710. --------x-2F1684BX0034-----------------------
  6711. INT 2F U - Intel Plug-and-Play - CONFIGURATION MANAGER - GET ENTRY POINT
  6712.     AX = 1684h
  6713.     BX = 0034h (ID for Configuration Manager) (see #1882)
  6714.     ES:DI = 0000h:0000h
  6715. Return: ES:DI -> API entry point (see #1892)
  6716.           0000h:0000h if Configuration Manager not loaded
  6717. Note:    this API is often provided by a DOS device driver, in which case it
  6718.       is available whether or not MSWindows is running
  6719. Index:    installation check;Plug-and-Play Configuration Manager
  6720. SeeAlso: AX=1684h/BX=304Ch
  6721.  
  6722. (Table 1892)
  6723. Call Configuration Manager entry point with:
  6724.     AX = function
  6725.         0000h "CM_GetVersion" get supported DDI version
  6726.         Return: AH = major version (01h)
  6727.             AL = minor version (00h)
  6728.             BX = number of devices identified by configuration
  6729.         Note:    returns AX = 0000h if no config manager installed
  6730.         0001h "CM_GetConfig" get device configuration
  6731.         BX = device index
  6732.         ES:DI -> buffer for configuration information (see #1894)
  6733.         Return: AX = status
  6734.                 0000h successful
  6735.                 ES:DI buffer filled
  6736.                 other error code (0001h = index out of range)
  6737.         0002h "CM_LockConfig" lock device configuration
  6738.         ES:DI -> configuration information (see #1894)
  6739.         Return: AX = status
  6740.                 0000h successful
  6741.                 ES:DI buffer filled with assigned config
  6742.                 0001h resources conflict
  6743.                 0002h invalid request or configuration info
  6744.         0003h "CM_UnlockConfig" unlock device configuration
  6745.         ES:DI -> configuration information (see #1894)
  6746.         Return: AX = status
  6747.                 0000h successful
  6748.                 ES:DI buffer filled with assigned config
  6749.                 0001h invalid request or configuration info
  6750.         0004h "CME_QueryResources" get hot-swappable resources
  6751.         ES:DI -> configuration information (see #1894)
  6752.         Return: AX = status (see #1893)
  6753.         0005h "CME_AllocResources" remove resources from available pool
  6754.         ES:DI -> configuration information (see #1894)
  6755.         Return: AX = status (see #1893)
  6756.         0006h "CME_DeallocResources" return resources to available pool
  6757.         ES:DI -> configuration information (see #1894)
  6758.         Return: AX = status (see #1893)
  6759.  
  6760. (Table 1893)
  6761. Values for Configuration Manager status:
  6762.  00h    successful
  6763.  01h    device not found, configuration error
  6764.  02h    I/O port unavailable
  6765.  04h    IRQ unavailable
  6766.  08h    DMA channel unavailable
  6767.  10h    memory range unavailable
  6768. SeeAlso: #1892
  6769.  
  6770. Format of Configuration Information Structure:
  6771. Offset    Size    Description    (Table 1894)
  6772.  00h    DWORD    bus ID
  6773.  04h    DWORD    device ID
  6774.  08h    DWORD    serial number
  6775.  0Ch    DWORD    logical ID
  6776.  10h    DWORD    flags
  6777. ---ISA bus---
  6778.  14h    BYTE    Card Select Number
  6779.  15h    BYTE    logical device number
  6780.  16h    WORD    Read Data port
  6781. ------
  6782.  18h    WORD    number of memory windows
  6783.  1Ah  9 DWORDs    physical base addresses of memory windows
  6784.  3Eh  9 DWORDs    length of memory windows
  6785.  62h  9 WORDs    memory window attributes
  6786.  74h    WORD    number of I/O ports
  6787.  76h 20 WORDs    I/O port base addresses
  6788.  B6h 20 WORDs    lengths of I/O port ranges
  6789.  F6h    WORD    number of IRQs
  6790.  F8h  7 BYTEs    IRQ registers
  6791.  FFh  7 BYTEs    IRQ attributes
  6792. 106h    WORD    number of DMA channels
  6793. 108h  7 BYTEs    DMA channels used
  6794. 10Fh  7 WORDs    DMA channel attributes
  6795. 11Dh  3 BYTEs    reserved
  6796. SeeAlso: #1892
  6797. --------W-2F1684BX0444-----------------------
  6798. INT 2F - MS Windows - VADMAD - GET DEVICE API ENTRY POINT
  6799.     AX = 1684h
  6800.     BX = 0444h (virtual device ID for VADMAD device) (see #1882)
  6801.     ES:DI = 0000h:0000h
  6802. Return: ES:DI -> VxD API entry point (see #1895)
  6803.           0000h:0000h if the VxD does not support an API
  6804.  
  6805. (Table 1895)
  6806. Call VADMAD entry point with:
  6807.     DX = operation
  6808.         0000h set VADMAD mode
  6809.         AX = desired mode
  6810.         0001h set VADMAD channel
  6811.         AX = desired channel
  6812. Note:    after setting mode/channel, start the DMA operation with an OUT to
  6813.       I/O port 0Bh (channels 0-3) or D6h (channels 4-7)
  6814. SeeAlso: #0629 at INT 20"Windows"
  6815. --------W-2F1684BX0750-----------------------
  6816. INT 2F - MS Windows - VSWITCHD - GET DEVICE API ENTRY POINT
  6817.     AX = 1684h
  6818.     BX = 0750h (virtual device ID for VSWITCHD device) (see #1882)
  6819.     ES:DI = 0000h:0000h
  6820. Return: ES:DI -> VxD API entry point (see #1896)
  6821.           0000h:0000h if the VxD does not support an API
  6822.  
  6823. (Table 1896)
  6824. Call VSWITCHD entry point with:
  6825.     AX = function
  6826.         0000h toggle windowed mode (simulate Alt-Enter keypress)
  6827.         Return: nothing
  6828.         0001h get windowed mode
  6829.         Return: CF clear if VM is windowed
  6830.             CF set if VM is full-screen
  6831. --------W-2F1684BX28A0-----------------------
  6832. INT 2F - MS Windows - PHARLAPX - GET DEVICE API ENTRY POINT
  6833.     AX = 1684h
  6834.     BX = 28A0h (virtual device ID for PHARLAPX device) (see #1882)
  6835.     ES:DI = 0000h:0000h
  6836. Return: ES:DI -> VxD API entry point (see #1897)
  6837.           0000h:0000h if the VxD does not support an API
  6838.  
  6839. (Table 1897)
  6840. Call PHARLAPX VxD entry point with:
  6841.     AX = function
  6842.         0001h get PHARLAP.386 version
  6843.         Return: AX = version number (AH = major, AL = minor)
  6844.     ---queue functions---
  6845.         0101h allocate a new message queue
  6846.         CX = size of queue data buffer in bytes
  6847.         Return: DX:AX = handle for new queue, or 0000h:0000h on error
  6848.         0102h allocate a new key queue
  6849.         CX = size of queue data buffer in bytes
  6850.         EDX = VM handle into which keys will be pasted
  6851.         Return: DX:AX = handle for new queue, or 0000h:0000h on error
  6852.         0103h free message queue
  6853.         EDX = queue handle
  6854.         Return: AX = status (0000h,0003h,0007h) (see #1898)
  6855.         0104h free key queue
  6856.         EDX = queue handle
  6857.         Return: AX = status (0000h,0003h,0005h) (see #1898)
  6858.         0105h add message to communications queue
  6859.         EDX = queue handle
  6860.         BX = length of message data in bytes
  6861.         CX = length of message header in bytes
  6862.         ES:(E)SI -> message header
  6863.         GS:(E)DI -> message data
  6864.         Return: AX = status (0000h-0003h,0007h) (see #1898)
  6865.         0106h remove message from queue
  6866.         EDX = queue handle
  6867.         CX = length of buffer in bytes
  6868.         ES:(E)SI -> buffer for message
  6869.         Return: AX = status (0000h,0003h,0006h,0007h,0008h) (see #1898)
  6870.             CX = length of returned message (if AX=0000h or 0008h)
  6871.         0107h flush queue (remove all data)
  6872.         EDX = queue handle
  6873.         Return: AX = status (0000h,0003h) (see #1898)
  6874.         0108h add PasteKey structure(s) to key queue
  6875.         EDX = queue handle
  6876.         CX = number of PasteKey structures in buffer
  6877.         ES:(E)SI -> PasteKey array (see #1899)
  6878.         Return: AX = status (0000h-0003h) (see #1898)
  6879.         0109h register enqueueing callback function
  6880.         EDX = queue handle
  6881.         ECX = function argument
  6882.         ES:(E)SI -> callback function
  6883.         Return: AX = status (0000h,0003h,0009h) (see #1898)
  6884.         010Ah register dequeueing callback function
  6885.         EDX = queue handle
  6886.         ECX = function argument
  6887.         ES:(E)SI -> callback function
  6888.         Return: AX = status (0000h,0003h,0009h) (see #1898)
  6889.         010Bh unregister enqueueing callback function
  6890.         EDX = queue handle
  6891.         Return: AX = status (0000h,0003h,0009h) (see #1898)
  6892.         010Ch unregister dequeueing callback function
  6893.         EDX = queue handle
  6894.         Return: AX = status (0000h,0003h,0009h) (see #1898)
  6895.         010Dh get message queue status
  6896.         EDX = queue handle
  6897.         Return: AX = status (0000h,0003h) (see #1898)
  6898.             CX = number of pending messages
  6899.         010Eh peek at message in queue
  6900.         EDX = queue handle
  6901.         BX = number of message in queue (0000h = first)
  6902.         CX = size of buffer in bytes
  6903.         ES:(E)SI -> buffer for message
  6904.         Return: AX = status (0000h,0003h,0006h,0008h) (see #1898)
  6905.             CX = length of returned message (if AX=0000h or 0008h)
  6906.         010Fh peek at last message in queue
  6907.         EDX = queue handle
  6908.         CX = size of buffer in bytes
  6909.         ES:(E)SI -> buffer for message
  6910.         Return: AX = status (0000h,0003h,0006h,0008h) (see #1898)
  6911.             CX = length of returned message (if AX=0000h or 0008h)
  6912.         0110h replace last message in queue
  6913.         EDX = queue handle
  6914.         CX = length of message header in bytes
  6915.         BX = length of message data in bytes
  6916.         ES:(E)SI -> message header
  6917.         GS:(E)DI -> message data
  6918.         Return: AX = status (0000h,0002h,0003h) (see #1898)
  6919.         0111h set permitted message count for queue
  6920.         EDX = queue handle
  6921.         CX = maximum number of messages to enqueue (FFFFh = unlimited)
  6922.         Return: AX = status (0000h,0003h) (see #1898)
  6923.     ---generalized VxD services---
  6924.         0202h call VxD function
  6925.         ES:(E)BX -> in/out register-set buffer
  6926.         Return: buffer updated
  6927.         0203h map flat
  6928.         ???
  6929.     --system register functions---
  6930.         0301h read system registers into buffer
  6931.         ES:(E)SI -> 512-byte buffer
  6932.         Return: AX = 0000h
  6933.             buffer filled (mostly zeros)
  6934.         0302h copy linear memory into buffer
  6935.         EDX = linear address
  6936.         CX = number of bytes to copy
  6937.         ES:(E)SI -> buffer
  6938.         Return: AX = 0000h
  6939.         0303h copy data into linear memory
  6940.         EDX = linear address
  6941.         CX = number of bytes to copy
  6942.         ES:(E)SI -> buffer
  6943.         Return: AX = 0000h
  6944.         0304h freeze VM
  6945.         ???
  6946.         0305h unfreeze VM
  6947.         ???
  6948.     ---name registration functions---
  6949.         0401h register name
  6950.         EDX = magic number to associate with name
  6951.         ES:(E)SI -> name to register
  6952.         Return: AX = status (0000h,0009h) (see #1898)
  6953.         0402h unregister name
  6954.         ES:(E)SI -> name to be unregistered
  6955.         Return: AX = status (0000h,0009h) (see #1898)
  6956.         0403h look up name
  6957.         ES:(E)SI -> name to look up
  6958.         Return: DX:AX = magic number or 0000h:0000h if not registered
  6959.         0404h get name list handle
  6960.         Return: DX:AX = name list handle
  6961.                 0000h:0000h if not initialized
  6962.     ---special DOS server routines (undocumented)---
  6963.         0501h register
  6964.         0502h unregister
  6965.         0503h validate VM
  6966.         0504h get INT9 count
  6967.         0505h get screen line
  6968.         0506h get shift status
  6969.         0507h get server PB pointer
  6970.         0508h initialize DOS shell
  6971.         0509h get last VM handle
  6972.  
  6973. (Table 1898)
  6974. Values for PHARLAPX function status:
  6975.  00h    successful
  6976.  01h    data is too large to fit in queue
  6977.  02h    queue is full
  6978.  03h    invalid queue handle
  6979.  04h    invalid VM handle for queue
  6980.  05h    error starting a paste operation
  6981.  06h    queue is empty
  6982.  07h    a VM is blocked waiting on the queue
  6983.  08h    message was too long (truncated)
  6984.  09h    unable to register or unregister specified callback
  6985. SeeAlso: #1897
  6986.  
  6987. Format of PHARLAPX PasteKey structure:
  6988. Offset    Size    Description    (Table 1899)
  6989.  00h    BYTE    ASCII code
  6990.  01h    BYTE    scan code (see #0005)
  6991.  02h    WORD    shift states
  6992. SeeAlso: #1897
  6993.  
  6994. Format of PHARLAPX VxD-call register structure:
  6995. Offset    Size    Description    (Table 1900)
  6996.  00h    DWORD    call number
  6997.  04h    WORD    input register map (see #1901)
  6998.  06h    WORD    output register map (see #1901)
  6999.  08h  7 DWORDs    values for EAX, EBX, ECX, EDX, EBP, ESI, EDI on call
  7000.  24h  4    WORDs    values for DS, ES, FG, GS on call
  7001.  2Ch    DWORD    EFLAGS on call
  7002.  30h  7 DWORDs    returned values of EAX, EBX, ECX, EDX, EBP, ESI, EDI
  7003.  4Ch  4 WORDs    returned values of DS, ES, FS, GS
  7004.  54h    DWORD    returned EFLAGS
  7005. SeeAlso: #1897
  7006.  
  7007. Bitfields for PHARLAPX VxD-call register map:
  7008. Bit(s)    Description    (Table 1901)
  7009.  0    value in EAX field is valid
  7010.  1    value in EBX field is valid
  7011.  2    value in ECX field is valid
  7012.  3    value in EDX field is valid
  7013.  4    value in EBP field is valid
  7014.  5    value in ESI field is valid
  7015.  6    value in EDI field is valid
  7016.  7    value in DS field is valid
  7017.  8    value in ES field is valid
  7018.  9    value in FS field is valid
  7019.  10    value in GS field is valid
  7020.  11    value in EFLAGS field is valid
  7021. SeeAlso: #1900
  7022. --------W-2F1684BX2925-----------------------
  7023. INT 2F - MS Windows - EDOS - GET DEVICE API ENTRY POINT
  7024.     AX = 1684h
  7025.     BX = 2925h (virtual device ID for EDOS device) (see #1882)
  7026.     ES:DI = 0000h:0000h
  7027. Return: ES:DI -> VxD API entry point (see #1902)
  7028.           0000h:0000h if the VxD does not support an API
  7029.  
  7030. (Table 1902)
  7031. Call EDOS entry point with:
  7032.     AX = 0000h get EDOS version number
  7033.         Return: AH = major version
  7034.             AL = minor version
  7035.     AX = 0001h display message
  7036.         CX = 0
  7037.         DX:BX -> ASCIZ Message
  7038.     AX = 0002h get EDOS error coded
  7039.         Return: EAX = time in milliseconds that Windows has been running
  7040.     AX = 0003h execute windows program
  7041.         Return: EAX = cumulative amount of time the virtual machine has
  7042.             been active, in milliseconds
  7043.     AX = 0008h get/set priority
  7044.         BX = 0000h??? foreground
  7045.          0001h background
  7046.         DI = 0000h get
  7047.          0001h set
  7048.         DX = priority setting
  7049.         Return: CX = foreground priority
  7050.             DX = background priority
  7051.             BX:AX = flags
  7052.             00000001h exclusive ON
  7053.             00000010h background ON
  7054.             SI = CPU percentage
  7055. --------x-2F1684BX304C-----------------------
  7056. INT 2F U - Intel Plug-and-Play - CONFIGURATION ACCESS - GET ENTRY POINT
  7057.     AX = 1684h
  7058.     BX = 304Ch (ID for Configuration Access) (see #1882)
  7059.     ES:DI = 0000h:0000h
  7060. Return: ES:DI -> API entry point (see #1903)
  7061.           0000h:0000h if Configuration Access not loaded
  7062. Note:    this API is often provided by a DOS device driver, in which case it
  7063.       is available whether or not MSWindows is running
  7064. Index:    installation check;Plug-and-Play Configuration Access
  7065. SeeAlso: AX=1684h/BX=0034h
  7066.  
  7067. (Table 1903)
  7068. Call Plug-and-Play Configuration Access entry point with:
  7069.     AX = function
  7070.         0000h "CA_GetVersion"
  7071.         0001h "CA_PCI_Read_Config_Byte" (see also INT 1Ah/AX=B108h)
  7072.         0002h "CA_PCI_Read_Config_Word" (see also INT 1Ah/AX=B109h)
  7073.         0003h "CA_PCI_Read_Config_DWord" (see also INT 1Ah/AX=B10Ah)
  7074.         0004h "CA_PCI_Write_Config_Byte" (see also INT 1Ah/AX=B10Bh)
  7075.         0005h "CA_PCI_Write_Config_Word" (see also INT 1Ah/AX=B10Ch)
  7076.         0006h "CA_PCI_Write_Config_DWord" (see also INT 1Ah/AX=B10Dh)
  7077.         0007h "CA_PCI_Generate_Special_Cycle" (see also INT 1Ah/AX=B106h)
  7078.         0008h "CA_PCI_Get_Routing_Options" (see also INT 1Ah/AX=B10Eh)
  7079.         000Bh "CA_PnPISA_Get_Info"
  7080.         000Ch "CA_PnPISA_Read_Config_Byte"
  7081.         000Dh "CA_PnPISA_Write_Config_Byte"
  7082.         000Eh "CA_PnPISA_Get_Resource_Data"
  7083.         0010h "CA_EISA_Get_Board_ID"
  7084.         0011h "CA_EISA_Get_Slot_Config"
  7085.         0012h "CA_EISA_Get_SlotFunc_Config"
  7086.         0013h "CA_EISA_Clear_NVRAM_Config"
  7087.         0014h "CA_EISA_Write_Config"
  7088.         0016h "CA_ESCD_Get_Info"
  7089.         0017h "CA_ESCD_Read_Config"
  7090.         0018h "CA_ESCD_Write_Config"
  7091.         0020h "CA_PnPB_Get_Num_Sys_Dev_Nodes"
  7092.         0021h "CA_PnPB_Get_Sys_Dev_Node"
  7093.         0022h "CA_PnPB_Set_Sys_Dev_Node"
  7094.         0023h "CA_PnPB_Get_Stat_Res_Info"
  7095.         0024h "CA_PnPB_Set_Stat_Res_Info"
  7096.     !!!
  7097. --------W-2F1684BX310E-----------------------
  7098. INT 2F - MS Windows - WPS - GET DEVICE API ENTRY POINT
  7099.     AX = 1684h
  7100.     BX = 310Eh (virtual device ID for WPS device) (see #1882)
  7101.     ES:DI = 0000h:0000h
  7102. Return: ES:DI -> VxD API entry point (see #1904)
  7103.           0000h:0000h if the VxD does not support an API
  7104.  
  7105. (Table 1904)
  7106. Call WPS protected-mode entry point with:
  7107.     DX = function
  7108.         0000h get WPS.386 version
  7109.         Return: CF clear
  7110.             AX = version (AH = major, AL = minor)
  7111.         0001h get number of installed VxDs
  7112.         Return: CF clear
  7113.             AX = number of installed VxDs
  7114.         0002h get VxD characteristics
  7115.         AX = number of VxD
  7116.         ES:BX -> buffer for VxD characteristics structure (see #1905)
  7117.         Return: CF clear
  7118.             ES:BX buffer filled
  7119.  
  7120. Format of WPS.386 VxD characteristics structure:
  7121. Offset    Size    Description    (Table 1905)
  7122.  00h    WORD    VxD ID number
  7123.  02h    BYTE    VxD minor version
  7124.  03h    BYTE    VxD major version
  7125.  04h    BYTE    DDK minor version
  7126.  05h    BYTE    DDK major version
  7127.  06h    WORD    flags
  7128.         bit 0: V86 API supported
  7129.         bit 1: PM API supported
  7130.         bit 2: services supported
  7131.  08h    DWORD    start order
  7132.  0Ch  9 BYTEs    ASCIZ VxD name
  7133. --------W-2F1684BX8888-----------------------
  7134. INT 2F - MS Windows - POSTMSG - GET DEVICE API ENTRY POINT
  7135.     AX = 1684h
  7136.     BX = 8888h (virtual device ID for POSTMSG device) (see #1882)
  7137.     ES:DI = 0000h:0000h
  7138. Return: ES:DI -> VxD API entry point (see #1906,#1908)
  7139.           0000h:0000h if the VxD does not support an API
  7140.  
  7141. (Table 1906)
  7142. Call POSTMSG protected-mode entry point with:
  7143.     AX = window handle
  7144.     CX:BX -> callback procedure (see #1907)
  7145. Return: nothing
  7146. Note:    this call registers a WinApp with the VxD; the callback must be in a
  7147.       fixed, non-discardable code segment
  7148. SeeAlso: #1908
  7149.  
  7150. (Table 1907)
  7151. Values POSTMSG callback routine is called with:
  7152.     STACK:    DWORD    "lParam" parameter from DOSApp
  7153.         WORD    "wParam" parameter from DOSApp
  7154.         WORD    Windows message number (WM_USER + 100)
  7155.         DWORD    registered hwnd
  7156.  
  7157. (Table 1908)
  7158. Call POSTMSG V86-mode entry point with:
  7159.     BX = wParam value to pass to protected-mode callback
  7160.     DX:AX = lParam value to pass to protected-mode callback
  7161. Return: CF clear if successful
  7162.     CF set on error (no WinApp registered)
  7163. SeeAlso: #1906
  7164. --------W-2F1684BX8888-----------------------
  7165. INT 2F - MS Windows - VbillD - GET DEVICE API ENTRY POINT
  7166.     AX = 1684h
  7167.     BX = 8888h (virtual device ID for VbillD device) (see #1882)
  7168.     ES:DI = 0000h:0000h
  7169. Return: ES:DI -> VxD API entry point (see #1909)
  7170.           0000h:0000h if the VxD does not support an API
  7171.  
  7172. (Table 1909)
  7173. Call VbillD entry point with:
  7174.     AX = function
  7175.         0001h set reverse video
  7176.         0002h set normal video
  7177. Return: ???
  7178. --------W-2F1685-----------------------------
  7179. INT 2F - MS Windows - SWITCH VMs AND CALLBACK
  7180.     AX = 1685h
  7181.     BX = VM ID of virtual machine to switch to
  7182.     CX = flags (see #1910)
  7183.     DX:SI = priority boost (see VMM.INC)
  7184.     ES:DI -> FAR procedure to callback
  7185. Return: CF set on error
  7186.         AX = error code
  7187.         01h invalid VM ID
  7188.         02h invalid priority boost
  7189.         03h invalid flags
  7190.     CF clear if successful
  7191.         event will be or has been called
  7192. Notes:    some DOS devices, such as networks, need to call functions in a
  7193.       specific VM. This call forces the appropriate VM to be installed.
  7194.     the callback procedure must preserve all registers and return with IRET
  7195. SeeAlso: AX=1683h,INT 15/AX=1117h,AX=DB06h"WINGO"
  7196.  
  7197. Bitfields for VM switching flags:
  7198. Bit(s)    Description    (Table 1910)
  7199.  0    wait until interrupts enabled
  7200.  1    wait until critical section unowned
  7201.  2-15    reserved (zero)
  7202. --------E-2F1686-----------------------------
  7203. INT 2F - DOS Protected-Mode Interface - DETECT MODE
  7204.     AX = 1686h
  7205. Return: AX = 0000h if operating in protected mode under DPMI (INT 31 available)
  7206.     AX nonzero if in real/V86 mode or no DPMI (INT 31 not available)
  7207. SeeAlso: AX=1687h
  7208. --------E-2F1687-----------------------------
  7209. INT 2F - DOS Protected-Mode Interface - INSTALLATION CHECK
  7210.     AX = 1687h
  7211. Return: AX = 0000h if installed
  7212.         BX = flags
  7213.         bit 0: 32-bit programs supported
  7214.         CL = processor type (02h=80286, 03h=80386, 04h=80486)
  7215.         DH = DPMI major version
  7216.         DL = two-digit DPMI minor version (binary)
  7217.         SI = number of paragraphs of DOS extender private data
  7218.         ES:DI -> DPMI mode-switch entry point (see #1911)
  7219.     AX nonzero if not installed
  7220. SeeAlso: AX=1686h,AX=43E0h,AX=DE01h/BX=4450h,AX=FB42h/BX=0001h
  7221. SeeAlso: INT 31/AX=0400h,INT 31/AX=5702h,INT 38/AH=10h
  7222.  
  7223. (Table 1911)
  7224. Call DPMI mode switch entry point with:
  7225.     AX = flags
  7226.         bit 0: set if 32-bit program
  7227.     ES = real mode segment of buffer for DPMI private data (ignored if
  7228.         SI was zero)
  7229. Return: CF set on error
  7230.         program still in real mode
  7231.         AX = error code (DPMI 1.0+)
  7232.            8011h unable to allocate all necessary descriptors
  7233.            8021h 32-bit program specified, but 16-bit DPMI host
  7234.     CF clear if successful
  7235.         CS = 16-bit selector corresponding to real-mode CS
  7236.         SS = selector corresponding to real-mode SS (64K limit)
  7237.         DS = selector corresponding to real-mode DS (64K limit)
  7238.         ES = selector to program's PSP (100h byte limit)
  7239.         FS = GS = 0
  7240.         high word of ESP = 0 if 32-bit program
  7241.         program now in protected mode
  7242. Note:    this entry point is only called for the initial switch to protected
  7243.       mode
  7244. --------W-2F1688BX0BAD-----------------------
  7245. INT 2F U - MS Windows 3.0, 386MAX v6.01 - GET ALIAS SELECTOR TO LDT
  7246.     AX = 1688h
  7247.     BX = 0BADh
  7248. Return: AX = 0000h if supported
  7249.         BX = alias selector for LDT
  7250. Note:    use the LSL instruction or GetSelectorLimit() to find LDT size
  7251.     this call should be considered obsolete for Windows 3.1+, as the
  7252.       alias selector can be retrieved via the API entry point for
  7253.       "MS-DOS" retrieved from INT 2F/AX=168Ah (see #1913)
  7254. --------W-2F1689-----------------------------
  7255. INT 2F U - MS Windows 3.0+ - KERNEL IDLE CALL
  7256.     AX = 1689h
  7257.     ???
  7258. Return: ???
  7259. SeeAlso: AX=1680h,INT 15/AX=1000h,INT 28
  7260. --------E-2F168A-----------------------------
  7261. INT 2F - DPMI 0.9+ - GET VENDOR-SPECIFIC API ENTRY POINT
  7262.     AX = 168Ah
  7263.     DS:(E)SI = selector:offset of ASCIZ vendor name (see #1912)
  7264. Return: AL = status
  7265.         00h successful
  7266.            ES:(E)DI -> extended API entry point
  7267.         8Ah unsuccessful
  7268. Notes:    the vendor name is used to determine which entry point to return; it is
  7269.       case-sensitive
  7270.     available in protected mode only
  7271.     32-bit applications use ESI and EDI, 16-bit applications use SI and DI
  7272.     this call is present but not documented for DPMI 0.9
  7273.     the Borland C++ 3.1 DPMILOAD does not handle requests for entry points
  7274.       other than the MS-DOS one gracefully, producing an unhandled
  7275.       exception report; this has been fixed in the Borland Pascal 7 version
  7276. SeeAlso: INT 31/AX=0A00h,INT 31/AH=57h
  7277.  
  7278. (Table 1912)
  7279. Values for DPMI vendor-specific API names:
  7280.  "MS-DOS"    MS Windows and 386MAX v6.00+ (see #1913)
  7281.  "386MAX"    386MAX v6.00+
  7282.  "HELIX_DPMI"    Helix Netroom's DPMI server
  7283.  "Phar Lap"    Phar Lap 286|DOS-Extender RUN286 (see #1914)
  7284.  "RATIONAL DOS/4G"  DOS/4G, DOS/4GW
  7285.  
  7286. (Table 1913)
  7287. Call Windows-support ("MS-DOS") entry point with:
  7288.     AX = 0100h get LDT alias selector
  7289. Return: CF clear if successful
  7290.         AX = alias selector
  7291.     CF set on error
  7292.  
  7293. (Table 1914)
  7294. Call Phar Lap RUN286 entry point with:
  7295.     AX = 0000h (function "load MSW")
  7296.     BX = new value for MSW register (low word of CR0)
  7297. Return: ???
  7298. --------W-2F168B-----------------------------
  7299. INT 2F - MS Windows 3.1 - SET FOCUS TO SPECIFIED VIRTUAL MACHINE
  7300.     AX = 168Bh
  7301.     BX = virtual machine ID (see AX=1683h), 0000h for current DOS box
  7302. Return: AL = 00h if focus set to specified VM
  7303. Notes:    documented on the Microsoft Developer's Network CD-ROM
  7304.     if the VM is a windowed DOS box, it will be set to full screen
  7305. SeeAlso: AX=1683h
  7306. --------W-2F168C-----------------------------
  7307. INT 2F - MS Windows 3.1 - RESTART COMMAND
  7308.     AX = 168Ch
  7309.     ???
  7310. Return: ???
  7311. Note:    WIN.COM executes specified application
  7312. --------W-2F1700-----------------------------
  7313. INT 2F - MS Windows "WINOLDAP" - IDENTIFY WinOldAp VERSION
  7314.     AX = 1700h
  7315. Return: AX = 1700h if this version of WINOLDAP doesn't support clipboard
  7316.     AX <> 1700h
  7317.         AL = WINOLDAP major version
  7318.         AH = WINOLDAP minor version
  7319. Program: WinOldAp (WINOLDAP.MOD) is a Microsoft Windows extension supporting
  7320.       "old" (character-mode) application access to Dynamic Data Exchange,
  7321.       menus, and the Windows clipboard.
  7322. Note:    this installation check DOES NOT follow the format used by other
  7323.       software of returning AL=FFh
  7324. SeeAlso: AX=1701h,AX=4601h
  7325. Index:    installation check;WINOLDAP
  7326. --------W-2F1701-----------------------------
  7327. INT 2F - MS Windows "WINOLDAP" - OPEN CLIPBOARD
  7328.     AX = 1701h
  7329. Return: AX = status
  7330.         nonzero success
  7331.         0000h   clipboard is already open
  7332. SeeAlso: AX=1700h,AX=1702h,AX=1703h,AX=1704h,INT 16/AX=CB00h
  7333. --------W-2F1702-----------------------------
  7334. INT 2F - MS Windows "WINOLDAP" - EMPTY CLIPBOARD
  7335.     AX = 1702h
  7336. Return: AX = status
  7337.         nonzero clipboard has been emptied
  7338.         0000h   failure
  7339. SeeAlso: AX=1700h,AX=1701h,AX=1703h,AX=1704h,INT 16/AX=CB05h
  7340. --------W-2F1703-----------------------------
  7341. INT 2F - MS Windows "WINOLDAP" - SET CLIPBOARD DATA
  7342.     AX = 1703h
  7343.     DX = clipboard format supported by WinOldAp (see #1915)
  7344.     ES:BX -> data (see #1916,#1917)
  7345.     SI:CX = size of data
  7346. Return: AX = status
  7347.         nonzero data copied into the Clipboard
  7348.         0000h   failure
  7349. SeeAlso: AX=1701h,AX=1705h,INT 16/AX=CB04h
  7350.  
  7351. (Table 1915)
  7352. Values for WinOldAp clipboard format:
  7353.  01h    text
  7354.  02h    bitmap
  7355.  03h    metafile picture
  7356.  04h    SYLK
  7357.  05h    DIF
  7358.  06h    TIFF
  7359.  07h    OEM text
  7360.  08h    DIB bitmap
  7361.  80h    special format (used by Windows WRITE, maybe other Windows applets???)
  7362.  81h    DSP text
  7363.  82h    DSP bitmap
  7364.  
  7365. Format of Windows Clipboard bitmap:
  7366. Offset    Size    Description    (Table 1916)
  7367.  00h    WORD    type (0000h)
  7368.  02h    WORD    width of bitmap in pixels
  7369.  04h    WORD    height of bitmap in pixels
  7370.  06h    WORD    bytes per line
  7371.  08h    BYTE    number of color planes
  7372.  09h    BYTE    number of adjacent color bits in pixel
  7373.  0Ah    DWORD    pointer to start of data
  7374.  0Eh    WORD    width in 0.1mm units
  7375.  10h    WORD    height in 0.1mm units
  7376.  12h  N BYTEs    bitmap data
  7377.  
  7378. Format of Windows metafile picture:
  7379. Offset    Size    Description    (Table 1917)
  7380.  00h    WORD    mapping mode
  7381.  02h    WORD    X extent
  7382.  04h    WORD    Y extent
  7383.  06h    WORD    picture data
  7384. --------W-2F1704-----------------------------
  7385. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA SIZE
  7386.     AX = 1704h
  7387.     DX = clipboard format supported by WinOldAp (see #1915)
  7388. Return:    DX:AX = size of data in bytes, including any headers
  7389.         0000h:0000h if no data in this format in the Clipboard
  7390. Note:    Windows reportedly rounds up the size of the data to a multiple of 32
  7391.       bytes
  7392. SeeAlso: AX=1700h,AX=1703h,AX=1705h
  7393. --------W-2F1705-----------------------------
  7394. INT 2F - MS Windows "WINOLDAP" - GET CLIPBOARD DATA
  7395.     AX = 1705h
  7396.     DX = clipboard format supported by WinOldAp (see #1915)
  7397.     ES:BX -> buffer
  7398. Return: AX = status
  7399.         nonzero success
  7400.         0000h   error, or no data in this format in Clipboard
  7401. SeeAlso: AX=1700h,AX=1704h,INT 16/AX=CB03h
  7402. --------W-2F1708-----------------------------
  7403. INT 2F - MS Windows "WINOLDAP" - CloseClipboard
  7404.     AX = 1708h
  7405. Return: AX = status
  7406.         0000h failure
  7407.         nonzero success
  7408. --------W-2F1709-----------------------------
  7409. INT 2F - MS Windows "WINOLDAP" - COMPACT CLIPBOARD
  7410.     AX = 1709h
  7411.     SI:CX = desired size in bytes
  7412. Return: DX:AX = number of bytes in largest block of free memory
  7413. Note:    WinOldAp is responsible for including the size of any headers
  7414. --------W-2F170A-----------------------------
  7415. INT 2F - MS Windows "WINOLDAP" - GET DEVICE CAPABILITIES
  7416.     AX = 170Ah
  7417.     DX = GDI information index (see #1918)
  7418. Return: AX = integer value of the desired item
  7419.           (see #1919,#1920,#1921,#1922,#1923,#1924,#1925)
  7420. Note:    This function returns the device-capability bits for the given display
  7421.  
  7422. (Table 1918)
  7423. Values for GDI information index:
  7424.  00h    device driver version
  7425.  02h    device classification
  7426.  04h    width in mm
  7427.  06h    height in mm
  7428.  08h    width in pixels
  7429.  0Ah    height in pixels
  7430.  0Ch    bits per pixel
  7431.  0Eh    number of bit planes
  7432.  10h    number of brushes supported by device
  7433.  12h    number of pens supported by device
  7434.  14h    number of markers supported by device
  7435.  16h    number of fonts supported by device
  7436.  18h    number of colors
  7437.  1Ah    size required for device descriptor
  7438.  1Ch    curve capabilities
  7439.  1Eh    line capabilities
  7440.  20h    polygon capabilities
  7441.  22h    text capabilities
  7442.  24h    clipping capabilities
  7443.  26h    bitblt capabilities
  7444.  28h    X aspect
  7445.  2Ah    Y aspect
  7446.  2Ch    length of hypotenuse of aspect
  7447.  58h    logical pixels per inch of width
  7448.  5Ah    logical pixels per inch of height
  7449. SeeAlso: #1919,#1920,#1921,#1922,#1923,#1924,#1925
  7450.  
  7451. (Table 1919)
  7452. Values for device classification:
  7453.  00h    vector plotter
  7454.  01h    raster display
  7455.  02h    raster printer
  7456.  03h    raster camera
  7457.  04h    character-stream, PLP
  7458.  05h    Metafile, VDM
  7459.  06h    display-file
  7460. SeeAlso: #1918,#1920,#1921,#1922,#1923,#1924,#1925
  7461.  
  7462. Bitfields for curve capabilities:
  7463. Bit(s)    Description    (Table 1920)
  7464.  0    circles
  7465.  1    pie wedges
  7466.  2    chord arcs
  7467.  3    ellipses
  7468.  4    wide lines
  7469.  5    styled lines
  7470.  6    wide styled lines
  7471.  7    interiors
  7472. SeeAlso: #1918,#1919,#1921,#1922,#1923,#1924,#1925
  7473.  
  7474. Bitfields for line capabilities:
  7475. Bit(s)    Description    (Table 1921)
  7476.  1    polylines
  7477.  2    markers
  7478.  3    polymarkers
  7479.  4    wide lines
  7480.  5    styled lines
  7481.  6    wide styled lines
  7482.  7    interiors
  7483. SeeAlso: #1918,#1919,#1920,#1922,#1923,#1924,#1925
  7484.  
  7485. Bitfields for polygon capabilities:
  7486. Bit(s)    Description    (Table 1922)
  7487.  0    polygons
  7488.  1    rectangles
  7489.  2    trapezoids
  7490.  3    scanlines
  7491.  4    wide borders
  7492.  5    styled borders
  7493.  6    wide styled borders
  7494.  7    interiors
  7495. SeeAlso: #1918,#1919,#1920,#1921,#1923,#1924,#1925
  7496.  
  7497. Bitfields for text capabilities:
  7498. Bit(s)    Description    (Table 1923)
  7499.  0    output precision character
  7500.  1    output precision stroke
  7501.  2    clippping precision stroke
  7502.  3    90-degree character rotation
  7503.  4    arbitrary character rotation
  7504.  5    independent X and Y scaling
  7505.  6    double-size
  7506.  7    integer scaling
  7507.  8    continuous scaling
  7508.  9    bold
  7509.  10    italic
  7510.  11    underline
  7511.  12    strikeout
  7512.  13    raster fonts
  7513.  14    vector fonts
  7514.  15    reserved
  7515. SeeAlso: #1918,#1919,#1920,#1921,#1922,#1924,#1925
  7516.  
  7517. (Table 1924)
  7518. Values for clipping capabilities:
  7519.  00h    none
  7520.  01h    clipping to rectangles
  7521. SeeAlso: #1918,#1919,#1920,#1921,#1922,#1923,#1925
  7522.  
  7523. Bitfields for raster capabilities:
  7524. Bit(s)    Description    (Table 1925)
  7525.  0    simple bitBLT
  7526.  1    device requires banding support
  7527.  2    device requires scaling support
  7528.  3    supports >64K bitmap
  7529. SeeAlso: #1918,#1919,#1920,#1921,#1922,#1923,#1924
  7530. ----------2F18-------------------------------
  7531. INT 2F U - MS-Manager
  7532.     AH = 18h
  7533.     ???
  7534. Return: ???
  7535. --------l-2F1900-----------------------------
  7536. INT 2F U - DOS 4.x only SHELLB.COM - INSTALLATION CHECK
  7537.     AX = 1900h
  7538. Return: AL = status
  7539.         00h not installed
  7540.         FFh installed
  7541. --------l-2F1901-----------------------------
  7542. INT 2F U - DOS 4.x only SHELLB.COM - SHELLC.EXE INTERFACE
  7543.     AX = 1901h
  7544.     BL = SHELLC type
  7545.         00h transient
  7546.         01h resident
  7547.     DS:DX -> far call entry point for resident SHELLC.EXE
  7548. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  7549. Note:    SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  7550. --------l-2F1902-----------------------------
  7551. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM INTERFACE
  7552.     AX = 1902h
  7553.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  7554.           final filename element uppercased
  7555.     DS:DX -> buffer for results
  7556. Return: AL = 00h  failed, either
  7557.         (a) final filename element quoted at ES:DI does not match
  7558.               identity of shell batch file quoted as parameter of most
  7559.               recent call of SHELLB command, or
  7560.         (b) no more Program Start Commands available.
  7561.     AL= FFh     success, then:
  7562.         memory at DS:[DX+1] onwards filled as:
  7563.         DX+1:    BYTE    count of bytes of PSC
  7564.         DX+2: N BYTEs    Program Start Command text
  7565.             BYTE    0Dh terminator
  7566. Desc:    COMMAND.COM executes the result of this call in preference to
  7567.       reading a command from a batch file.    Thus the batch file does not
  7568.       advance in execution for so long as SHELLB provides PSCs from its
  7569.       workspace.
  7570. Note:    The PSCs are planted in SHELLB workspace by SHELLC, the user
  7571.       menu interface.  The final PSC of a sequence is finished with a
  7572.       GOTO COMMON, which causes a loop back in the batch file which called
  7573.       SHELLC so as to execute SHELLC again.     The check on batch file name
  7574.       permits PSCs to CALL nested batch files while PSCs are still stacked
  7575.       up for subsequent execution.
  7576. --------l-2F1903-----------------------------
  7577. INT 2F U - DOS 4.x only SHELLB.COM - COMMAND.COM interface
  7578.     AX = 1903h
  7579.     ES:DI -> ASCIZ batch file name as for AX=1902h
  7580. Return: AL = status
  7581.         FFh quoted batch file name matches last SHELLB parameter
  7582.         00h it does not
  7583. --------l-2F1904-----------------------------
  7584. INT 2F U - DOS 4.x only SHELLB.COM - SHELLB transient to TSR intrface
  7585.     AX = 1904h
  7586. Return: ES:DI -> name of current shell batch file:
  7587.         WORD    number of bytes of name following
  7588.         BYTEs    (8 max) uppercase name of shell batch file
  7589. --------V-2F1A00-----------------------------
  7590. INT 2F - DOS 4.0+ ANSI.SYS - INSTALLATION CHECK
  7591.     AX = 1A00h
  7592. Return: AL = FFh if installed
  7593. Notes:    AVATAR.SYS also responds to this call
  7594.     documented for DOS 5+, but undocumented for DOS 4.x
  7595. --------V-2F1A00BX414E-----------------------
  7596. INT 2F - ANSIPLUS.SYS v2.00+ - INSTALLATION CHECK
  7597.     AX = 1A00h
  7598.     BX = 414Eh ('AN')
  7599.     CX = 5349h ('SI')
  7600.     DX = 2B2Bh ('++')
  7601. Return: AL = FFh if installed
  7602.         CF clear
  7603.         ES:BX -> INT 29 entry point
  7604.         CX = ANSIPLUS BCD version number (v3.10+, CH=major, CL=minor)
  7605.         DL = capabilities (v4.00+)
  7606.         00h full capability driver
  7607.         01h reduced capability driver
  7608.         2Bh full capability driver (before v4.00)
  7609. Program: ANSIPLUS.SYS is a CON device driver by Kristofer Sweger which
  7610.       replaces the normal ANSI.SYS with a more powerful version having
  7611.       many additional features
  7612. Notes:    ANSIPLUS also identifies itself as ANSI.SYS if BX,CX, or DX differ
  7613.       from the magic values above
  7614.     an additional installation check is to test for the signature
  7615.       "ANSIPLUS" 12 bytes before the INT 29 entry point; the version
  7616.       number is also available as a four-character ASCII string (e.g.
  7617.       "4.00") four bytes before the entry point
  7618. SeeAlso: AX=1AA5h,AX=1AA6h,AX=1AA7h,AX=1AA8h,AX=1AA9h,AX=1AAAh,AX=D44Fh
  7619. --------V-2F1A00BX4156-----------------------
  7620. INT 2F - AVATAR.SYS - INSTALLATION CHECK
  7621.     AX = 1A00h
  7622.     BX = 4156h ('AV')
  7623.     CX = 4154h ('AT')
  7624.     DX = 4152h ('AR')
  7625. Return: AL = FFh if installed
  7626.         CF clear
  7627.         BX = AVATAR protocol level supported
  7628.         CX = driver type
  7629.         0000h AVATAR.SYS
  7630.         4456h DVAVATAR.COM inside DESQview window
  7631.         DX = 0016h
  7632. Program: AVATAR.SYS is a CON replacement by George Adam Stanislav which
  7633.       interprets AVATAR command codes in the same way that ANSI interprets
  7634.       ANSI command codes
  7635. Notes:    AVATAR also identifies itself as ANSI.SYS if BX, CX, or DX differ from
  7636.       the magic values
  7637. SeeAlso: AX=1A21h,AX=1A3Ch,AX=1A3Fh,AX=1A52h,AX=1A72h,AX=1A7Dh,AX=1AADh"AVATAR"
  7638. --------V-2F1A01-----------------------------
  7639. INT 2F U - DOS 4.0+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  7640.     AX = 1A01h
  7641.     CL = function
  7642.         7Fh for GET
  7643.         5Fh for SET
  7644.     DS:DX -> parm block as for INT 21,AX=440Ch,CX=037Fh/035Fh respectively
  7645. Return:    CF clear if successful
  7646.         AX destroyed
  7647.     CF set on error
  7648.         AX = error code (many non-standard)
  7649. Note:    presumably this is the DOS IOCTL interface to ANSI.SYS
  7650. SeeAlso: AX=1A02h,INT 21/AX=440Ch
  7651. --------V-2F1A02-----------------------------
  7652. INT 2F U - DOS 4.0+ ANSI.SYS internal - MISCELLANEOUS REQUESTS
  7653.     AX = 1A02h
  7654.     DS:DX -> parameter block (see #1926)
  7655. Return: CF clear if successful
  7656.     CF set on error
  7657.         AX = error code
  7658. Note:    DOS 5+ chains to previous handler if AL > 02h on call
  7659. SeeAlso: AX=1A01h
  7660.  
  7661. Format of ANSI.SYS parameter block:
  7662. Offset    Size    Description    (Table 1926)
  7663.  00h    BYTE    subfunction
  7664.         00h set/reset interlock
  7665.         01h get /L flag
  7666.  01h    BYTE    interlock state
  7667.         00h=reset, 01h=set
  7668.           This interlock prevents some of the ANSI.SYS post-processing
  7669.           in its hook onto INT 10, AH=00h mode set
  7670.  02h    BYTE    (returned)
  7671.         00h if /L not in effect
  7672.         01h if /L in effect
  7673. --------V-2F1A21-----------------------------
  7674. INT 2F - AVATAR.SYS - SET DRIVER STATE
  7675.     AX = 1A21h (AL='!')
  7676.     DS:SI -> command string with one or more state characters (see #1927)
  7677.     CX = length of command string
  7678. Return: CF set on error (invalid subfunction)
  7679.     CF clear if successful
  7680. Note:    the characters in the state string are interpreted left to right, and
  7681.       need not be in any particular order
  7682. SeeAlso: AX=1A00h/BX=4156h,AX=1A3Fh
  7683.  
  7684. (Table 1927)
  7685. Values for AVATAR.SYS state characters:
  7686.  'a'    activate driver
  7687.  'd'    disable driver
  7688.  'f'    use fast screen output
  7689.  'g'    always convert gray keys (+ and -) to function keys
  7690.  'G'    never convert gray keys
  7691.  'l'    convert gray keys only when ScrollLock active
  7692.  's'    use slow screen output
  7693.  't'    Tandy 1000 keyboard (not yet implemented)
  7694. --------V-2F1A3C-----------------------------
  7695. INT 2F U - AVATAR.SYS v0.11 - ???
  7696.     AX = 1A3Ch
  7697.     ???
  7698. Return: CX = 0000h
  7699. SeeAlso: AX=1A00h/BX=4156h,AX=1A21h,AX=1A3Eh
  7700. --------V-2F1A3E-----------------------------
  7701. INT 2F U - AVATAR.SYS v0.11 - ???
  7702.     AX = 1A3Eh
  7703.     CL = ???
  7704.     CH = ???
  7705.     DL = ???
  7706.     DH = ???
  7707. Return: CL = ???
  7708.     CH = ???
  7709.     DL = ???
  7710.     DH = ???
  7711. SeeAlso: AX=1A3Ch,AX=1A3Fh
  7712. --------V-2F1A3F-----------------------------
  7713. INT 2F - AVATAR.SYS - QUERY DRIVER STATE
  7714.     AX = 1A3Fh (AL='?')
  7715.     ES:DI -> buffer
  7716.     CX = length of buffer in bytes
  7717. Return: CF clear
  7718.     CX = actual size of returned info
  7719. Note:    the returned information consists of multiple letters whose meanings
  7720.       are described under AX=1A21h
  7721. SeeAlso: AX=1A00h/BX=4156h,AX=1A21h,AX=1A44h
  7722. --------S-2F1A42BX4156-----------------------
  7723. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ3 HANDLER
  7724.     AX = 1A42h
  7725.     BX = 4156h ('AV')
  7726.     ES:DI -> FAR handler for serial port using IRQ3
  7727.     DS = data segment needed by handler
  7728. Return: AX = status/return value
  7729.         0000h if no more room
  7730.         1A42h if ASD not installed
  7731.         else handle to use when uninstalling
  7732. Notes:    the handler need not save/restore registers or signal EOI to the
  7733.       interrupt controller
  7734.     the handler should return AX=0000h if the interrupt was meant for it,
  7735.       and either leave AX unchanged or return a non-zero value otherwise
  7736.     the most recently installed handler will be called first, continuing
  7737.       to earlier handlers until one returns AX=0000h
  7738. SeeAlso: AX=1A43h,AX=1A62h
  7739. --------S-2F1A43BX4156-----------------------
  7740. INT 2F - AVATAR Serial Dispatcher - INSTALL IRQ4 HANDLER
  7741.     AX = 1A43h
  7742.     BX = 4156h ('AV')
  7743.     ES:DI -> FAR handler for serial port using IRQ4
  7744.     DS = data segment needed by handler
  7745. Return: AX = status/return value
  7746.         0000h if no more room
  7747.         1A43h if ASD not installed
  7748.         else handle to use when uninstalling
  7749. Notes:    (see AX=1A42h)
  7750. SeeAlso: AX=1A42h,AX=1A63h
  7751. --------V-2F1A44BX4156-----------------------
  7752. INT 2F - AVATAR.SYS v0.11+ - GET DATA SEGMENT
  7753.     AX = 1A44h
  7754.     BX = 4156h ('AV')
  7755. Return: AX = 0000h
  7756.     DS = data segment
  7757.     CX = size of data segment
  7758. Note:    AVATAR.SYS calls this function whenever it is invoked.    If each
  7759.       process under a multitasker hooks this function and provides a
  7760.       separate data segment, AVATAR.SYS becomes fully reentrant.
  7761. SeeAlso: AX=1A21h,AX=1A3Fh,AX=1A52h
  7762. --------V-2F1A52-----------------------------
  7763. INT 2F U - AVATAR.SYS v0.11 - GET ???
  7764.     AX = 1A52h
  7765.     CX = size of buffer
  7766.     ES:DI -> buffer
  7767. Return: ??? copied into user buffer
  7768. Note:    the maximum size of the data which may be copied is returned by
  7769.       AX=1A72h
  7770. SeeAlso: AX=1A53h,AX=1A72h
  7771. --------V-2F1A53-----------------------------
  7772. INT 2F U - AVATAR.SYS v0.11 - ???
  7773.     AX = 1A53h
  7774.     CL = ??? (00h-05h)
  7775.     ???
  7776. Return: ???
  7777. SeeAlso: AX=1A00h/BX=4156h,AX=1A52h,AX=1A72h
  7778. --------S-2F1A62BX4156-----------------------
  7779. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ3 HANDLER
  7780.     AX = 1A62h
  7781.     BX = 4156h ('AV')
  7782.     CX = handle for IRQ routine returned by AX=1A42h
  7783. SeeAlso: AX=1A42h,AX=1A63h
  7784. --------S-2F1A63BX4156-----------------------
  7785. INT 2F - AVATAR Serial Dispatcher - UNINSTALL IRQ4 HANDLER
  7786.     AX = 1A63h
  7787.     BX = 4156h ('AV')
  7788.     CX = handle for IRQ routine returned by AX=1A43h
  7789. SeeAlso: AX=1A43h,AX=1A62h
  7790. --------V-2F1A72-----------------------------
  7791. INT 2F U - AVATAR.SYS v0.11 - GET ??? SIZE
  7792.     AX = 1A72h
  7793. Return: CX = maximum size of ???
  7794. SeeAlso: AX=1A00h/BX=4156h,AX=1A52h,AX=1A7Bh,AX=1AADh"AVATAR"
  7795. --------V-2F1A7B-----------------------------
  7796. INT 2F U - AVATAR.SYS v0.11 - ???
  7797.     AX = 1A7Bh
  7798. Return: AX = 0000h
  7799.     CX = 0000h
  7800. SeeAlso: AX=1A00h/BX=4156h,AX=1A72h,AX=1A7Dh
  7801. --------V-2F1A7D-----------------------------
  7802. INT 2F U - AVATAR.SYS v0.11 - ???
  7803.     AX = 1A7Dh
  7804. Return: AX = ???
  7805. SeeAlso: AX=1A00h/BX=4156h,AX=1A7Bh
  7806. --------V-2F1AA5-----------------------------
  7807. INT 2F - ANSIPLUS v4.03+ - GET/SET ANSIPLUS INTERNAL VARIABLES
  7808.     AX = 1AA3h
  7809.     BH = function
  7810.         00h get current/default colors
  7811.         Return: CH = default colors
  7812.             CL = current colors
  7813.         01h set current/default colors
  7814.         CH = default colors (00h = leave unchanged)
  7815.         CL = current colors
  7816.         02h get current subscreen region
  7817.         Return: BH,BL = true screen rows,columns
  7818.             CH,CL = top left row,column of region
  7819.             DH,DL = bottom right row,column of region
  7820.         03h set subscreen region
  7821.         CH,CL = top left row,column of region
  7822.         DH,DL = bottom right row,column of region
  7823.         04h get driver features (bits 0-31)
  7824.         Return: DX:CX = current feature bits
  7825.         05h set driver features (bits 0-31)
  7826.         DX:CX = feature bits
  7827.         06h get driver features (bits 32-63)
  7828.         Return: DX:CX = current feature bits
  7829.         07h set driver features (bits 32-63)
  7830.         DX:CX = feature bits
  7831.         other: reserved for future use
  7832. SeeAlso: AX=1AA4h,AX=1AA5h
  7833. --------V-2F1AA5-----------------------------
  7834. INT 2F - ANSIPLUS v4.02+ - GET/SET ANSIPLUS SMOOTH SCROLLING RATE
  7835.     AX = 1AA4h
  7836.     BL = function
  7837.         00h get scrolling rate
  7838.         01h set scrolling rate
  7839.             BH = new minimum scrolling rate in scan lines per retrace
  7840. Return: BH = smooth scrolling rate
  7841. SeeAlso: AX=1AA3h,AX=1AA5h
  7842. --------V-2F1AA5-----------------------------
  7843. INT 2F - ANSIPLUS v4.00+ - GET/SET ANSIPLUS CLIPBOARD
  7844.     AX = 1AA5h
  7845.     DH = subfunction
  7846.         00h get clipboard information
  7847.         01h get clipboard text
  7848.         02h set clipboard text
  7849.         03h append text to clipboard
  7850.         04h clear clipboard
  7851.         05h paste clipboard to keyboard
  7852.     ES:BX -> data area for subfunctions 01h, 02h, and 03h
  7853.     CX = size of data area (maximum size for subfunction 01h, actual size
  7854.         to add to clipboard for subfunctions 02h and 03h)
  7855. Return: AL = status
  7856.         00h successful
  7857.         01h unsupported subfunction (reduced capability driver)
  7858.         02h insufficient space
  7859.         A5h unsupported function (ANSIPLUS before v4.00)
  7860.     ES:BX -> ANSIPLUS local clipboard data
  7861.     CX = number of bytes currently in local clipboard
  7862.     DX = maximum size of local clipboard
  7863. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA4h,AX=1AA6h
  7864. --------V-2F1AA6-----------------------------
  7865. INT 2F - ANSIPLUS v4.00+ - ENABLE/DISABLE ANSIPLUS DRIVER
  7866.     AX = 1AA6h
  7867.     BH = function
  7868.         00h get hooked interrupts
  7869.         01h set hooked interrupts mask
  7870.         BL = new interrupts mask (see #1928)
  7871. Return: BL = previous interrupts mask (see #1928)
  7872. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA7h
  7873.  
  7874. Desc:    used to temporarily disable any prior copies of ANSIPLUS when a new
  7875.       copy is installed, such as in a multitasking system like DESQview
  7876. Note:    only the most-recently loaded copy of ANSIPLUS on the current INT 2F
  7877.       chain responds to this call
  7878.  
  7879. Bitfields for ANSIPLUS hooked interrupts mask:
  7880. Bit(s)    Description    (Table 1928)
  7881.  0    INT 09 hook disabled
  7882.  1    INT 10 hook disabled
  7883.  2    INT 15 hook disabled
  7884.  3    INT 16 hook disabled
  7885.  4    INT 1C hook disabled
  7886.  5    reset all bits when INT 29 called
  7887.  6    INT 29 hook disabled
  7888.  7    INT 33, INT 74, or other mouse event hook disabled
  7889. --------V-2F1AA7-----------------------------
  7890. INT 2F - ANSIPLUS v4.00+ - ENABLE/DISABLE ANSIPLUS FEATURES
  7891.     AX = 1AA7h
  7892.     BL = function
  7893.         00h prevent scroll-back saves
  7894.         01h enable scroll-back saves
  7895.         02h disable key reprogramming and lock changes by escape sequences
  7896.         03h enable key reprogramming by escape sequences
  7897.         04h    disable and lock key stacking changes by escape sequences
  7898.         05h allow key stacking by escape sequences
  7899. Return: nothing
  7900. SeeAlso: AX=1AA6h
  7901. --------V-2F1AA8-----------------------------
  7902. INT 2F - ANSIPLUS v3.10+ - GET NEXT ANSIPLUS SCROLLBACK LINE
  7903.     AX = 1AA8h
  7904. Return: AL = status
  7905.         00h successful
  7906.         ES:BX -> screen line (character and attribute pairs)
  7907.         CX = length of line in bytes, 0000h if no more lines or
  7908.               unsupported video mode
  7909.         01h unsupported video mode active
  7910.         02h screen currently scrolled back
  7911.         03h reduced capability driver
  7912.         A8h unsupported function (driver before v3.10)
  7913. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA9h
  7914. --------V-2F1AA9-----------------------------
  7915. INT 2F - ANSIPLUS v3.10+ - GET ANSIPLUS SCROLLBACK INFORMATION
  7916.     AX = 1AA9h
  7917. Return: AL = status
  7918.         00h successful
  7919.         BX = current number of lines in scrollback buffer
  7920.         CX = number of bytes in one line
  7921.         01h unsupported video mode active
  7922.         02h screen currently scrolled back
  7923.         03h reduced capability driver
  7924.         A9h unsupported function (driver before v3.10)
  7925. Desc:    determine how much data is in the scrollback buffer and initialize
  7926.       scrollback retrieval to return the first line on the next call to
  7927.       AX=1AA8h
  7928. SeeAlso: AX=1A00h/BX=414Eh,AX=1AA8h
  7929. --------V-2F1AAA-----------------------------
  7930. INT 2F - ANSIPLUS v3.01+ - GET/SET ANSIPLUS SCREEN SAVER BLANKING TIME
  7931.     AX = 1AAAh
  7932.     BX = function
  7933.         FFFFh to get current blanking time
  7934.         other to set time
  7935.         CX = blanking time in clock ticks (0000h-7FFFh)
  7936. Return: BX = current blanking time
  7937.     CX = blanking time when last set
  7938. SeeAlso: AX=1A00h/BX=414Eh,AX=1AABh
  7939. --------V-2F1AAB-----------------------------
  7940. INT 2F - ANSIPLUS v3.01+ - SET ANSIPLUS KEY REPEAT RATE
  7941.     AX = 1AABh
  7942.     BX = repeat rate in characters per second
  7943.         0000h use BIOS repeat rate
  7944. Return: nothing
  7945. SeeAlso: AX=1A00h/BX=414Eh,AX=1AAAh,AX=1AACh
  7946. --------V-2F1AAC-----------------------------
  7947. INT 2F - ANSIPLUS v3.00+ - LOAD CHARACTER GENERATOR
  7948.     AX = 1AACh
  7949.     BH = number of bytes per character pattern
  7950.     BL = VGA/EGA character table to be loaded
  7951.     CX = number of characters to load
  7952.     DX = starting character code (offset into Map2 block)
  7953.     ES:BP -> user character table to be loaded
  7954. Return: AX = 1100h
  7955. Desc:    load the EGA/VGA character generator without the BIOS function's
  7956.       side effects of resetting the video mode and color palette
  7957. SeeAlso: AX=1A00h/BX=414Eh,AX=1AABh,AX=1AADh"ANSIPLUS",INT 10/AX=1100h
  7958. --------V-2F1AAD-----------------------------
  7959. INT 2F - ANSIPLUS v2.00+ - ANSIPLUS DEVICE STATUS REPORT
  7960.     AX = 1AADh
  7961.     BL = report request code (81h-96h for v4.00)
  7962.     CX = color selector or key code, if required by request
  7963. Return: AX = first reported result
  7964.     BX = second result
  7965.     CX = third result, if applicable (unchanged otherwise)
  7966.     DX = fourth result, if applicable (unchanged otherwise)
  7967. Desc:    get device status reports equivalent to those for Esc [#n sequences
  7968.       while bypassing any device redirection and avoiding the need to
  7969.       parse the returned result
  7970. Note:    the report request code in BL is identical to the number in the
  7971.       corresponding Esc [#n sequence
  7972. SeeAlso: AX=1A00h/BX=414Eh,AX=1AACh
  7973. --------V-2F1AADDX0000-----------------------
  7974. INT 2F U - AVATAR.SYS v0.11 - ???
  7975.     AX = 1AADh
  7976.     DX = 0000h
  7977.     CX = subfunction (00h-0Ch)
  7978.     ???
  7979. Return: AX = 0000h if DX was nonzero
  7980.     ???
  7981. SeeAlso: AX=1A00h/BX=4156h,AX=1A72h
  7982. --------m-2F1B00-----------------------------
  7983. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  7984.     AX = 1B00h
  7985. Return: AL = FFh if installed
  7986. Note:    XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  7987.     This extension hooks onto INT 67/AH=58h and returns from that call data
  7988.       which excludes the physical pages being used by DOS.
  7989. SeeAlso: AH=1Bh"FRAME INFO"
  7990. --------m-2F1B-------------------------------
  7991. INT 2F U - DOS 4+ XMA2EMS.SYS extension internal - GET HIDDEN FRAME INFORMATION
  7992.     AH = 1Bh
  7993.     AL <> 00h
  7994.     DI = hidden physical page number
  7995. Return: AX = FFFFh if failed (no such hidden page)
  7996.     AX = 0000h if OK, then
  7997.         ES = segment of page frame
  7998.         DI = physical page number
  7999. Notes:    this corresponds to the data edited out of the INT 67/AH=58h call
  8000.     FASTOPEN makes this call with AL = FFh
  8001. SeeAlso: AX=1B00h
  8002. --------V-2F2300-----------------------------
  8003. INT 2F - DR DOS 5.0 GRAFTABL - INSTALLATION CHECK
  8004.     AX = 2300h
  8005. Return: AH = FFh
  8006. Note:    this installation check does not follow the usual format
  8007. SeeAlso: AH=23h,AX=2E00h
  8008. --------V-2F23-------------------------------
  8009. INT 2F - DR DOS 5.0 GRAFTABL - GET GRAPHICS DATA
  8010.     AH = 23h
  8011.     AL nonzero
  8012. Return: AH = FFh
  8013.     ES:BX -> graphics data (8 bytes for each character from 80h to FFh)
  8014. SeeAlso: AX=2300h,AX=2E00h
  8015. --------T-2F2700-----------------------------
  8016. INT 2F - DR DOS 6.0 TaskMAX - INSTALLATION CHECK
  8017.     AX = 2700h
  8018. Return: AL = status
  8019.         00h not installed
  8020.         FFh installed
  8021. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in both
  8022.       taskswitching and multitasking modes
  8023. --------T-2F2701-----------------------------
  8024. INT 2F - DR DOS 6.0 TaskMAX - GET STATUS
  8025.     AX = 2701h
  8026. Return: AX = maximum simultaneous tasks
  8027.     BX = index into TASK_IDS of current foreground task
  8028.     CX = currently-active tasks
  8029.     DX = version number (DL = major, DH = minor)
  8030.         (DR DOS 6.0 = 0001h, Novell DOS 7 = 0002h)
  8031.     ES:SI -> TASK_IDS
  8032.     ES:DI -> name table (array of 8-byte names, NUL-terminated if <8 chars)
  8033. Notes:    do not attempt to create a new task if CX == AX
  8034.     the task's index is its position on the task menu, while its ID is the
  8035.       position within the internal task name table
  8036. SeeAlso: AX=2714h,AX=2716h
  8037. --------T-2F2702-----------------------------
  8038. INT 2F - DR DOS 6.0 TaskMAX - GET PER-TASK EMS LIMIT
  8039.     AX = 2702h
  8040. Return: DX = maximum pages INT 67/AH=42h will report available
  8041. Note:    TaskMAX does not limit EMS allocations other than by limiting the
  8042.       amount which is reported as being available at a given time
  8043. SeeAlso: AX=2703h,INT 67/AH=42h
  8044. --------T-2F2703-----------------------------
  8045. INT 2F - DR DOS 6.0 TaskMAX - SET PER-TASK EMS LIMIT
  8046.     AX = 2703h
  8047.     DX = maximum pages INT 67/AH=42h should report available
  8048. Return: DX = new maximum for reporting
  8049. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in
  8050.       both taskswitching and multitasking modes
  8051. SeeAlso: AX=2702h,INT 67/AH=42h
  8052. --------T-2F2704-----------------------------
  8053. INT 2F - DR DOS 6.0 TaskMAX - REGISTER/UNREGISTER TASK MANAGER
  8054.     AX = 2704h
  8055.     DL = subfunction
  8056.         00h unregister task manager
  8057.         01h register task manager
  8058. Return: DL = status
  8059.         00h registered
  8060.         01h unregistered
  8061. Notes:    a task manager replaces TaskMAX's menu system with its own user
  8062.       interface; while one is registered, the TaskMAX hotkeys and
  8063.       Ctrl-Alt-Del invoke the manager rather than the built-in menu system
  8064.     unregister the task manager before terminating it
  8065. SeeAlso: AX=2705h
  8066. Index:    hotkeys;TaskMAX
  8067. --------T-2F2705-----------------------------
  8068. INT 2F - DR DOS 6.0 TaskMAX - ENABLE/DISABLE DIRECT SWITCHING
  8069.     AX = 2705h
  8070.     DL = subfunction
  8071.         00h disable keystrokes for switching to next/prev/specified task
  8072.         01h enable
  8073. Return: nothing
  8074. Note:    should only be called by a registered task manager (see AX=2704h)
  8075. SeeAlso: AX=2704h,AX=2706h
  8076. --------T-2F2706-----------------------------
  8077. INT 2F - DR DOS 6.0 TaskMAX - SWITCH TO SPECIFIED TASK
  8078.     AX = 2706h
  8079.     DX = task index (see AX=2701h) of task to be activated
  8080. Return: DX = task index of previously-active task
  8081. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in
  8082.       both taskswitching and multitasking modes
  8083. SeeAlso: AX=2705h,AX=2707h,AX=2715h
  8084. --------T-2F2707-----------------------------
  8085. INT 2F - DR DOS 6.0 TaskMAX - CREATE NEW TASK
  8086.     AX = 2707h
  8087.     DS:DX -> ASCIZ pathname of executable
  8088.     ES:BX -> parameter block (see #1929)
  8089.     CX = number of ticks before automatic return to task manager
  8090.         (0000h = run until termination or explicitly switched)
  8091. Return: DX = new task's task index (FFFFh if task terminated)
  8092. SeeAlso: AX=2706h,AX=2708h
  8093.  
  8094. Format of TaskMAX parameter block:
  8095. Offset    Size    Description    (Table 1929)
  8096.  00h    WORD    reserved, should be 0000h
  8097.  02h    DWORD    pointer to command tail to be copied into child's PSP
  8098.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  8099.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  8100. --------T-2F2708-----------------------------
  8101. INT 2F - DR DOS 6.0 TaskMAX - DELETE TASK
  8102.     AX = 2708h
  8103.     DX = task index
  8104. Return: DX = FFFFh (task deleted)
  8105. Notes:    this call should only be used for abnormal task termination, after
  8106.       first checking for open files with AX=270Ch; should not be used
  8107.       with programs that allocate EMS or XMS memory
  8108.     switches to specified task first
  8109. SeeAlso: AX=2707h
  8110. --------T-2F2709-----------------------------
  8111. INT 2F - DR DOS 6.0 TaskMAX - NAME TASK
  8112.     AX = 2709h
  8113.     DX = task index
  8114.     DS:SI -> 8-byte name (8 NULs = remove name)
  8115. Return: AL = task flags
  8116.         00h ID unused or task terminated
  8117.         01h ID in use, task name table entry valid
  8118.         81h ID in use, task name fixed
  8119.     BX = task ID
  8120.     ES:DI -> name in task name table (see AX=2701h)
  8121. Note:    the task retains the given name until it terminates or the name is
  8122.       removed by specifying a name of 8 NULs.
  8123. SeeAlso: AX=2701h,AX=2707h
  8124. --------T-2F270A-----------------------------
  8125. INT 2F - DR DOS 6.0 TaskMAX - CONVERT TASK INDEX TO TASK ID
  8126.     AX = 270Ah
  8127.     DX = task index
  8128. Return: DX = task ID (FFFFh if index invalid)
  8129. Note:    task IDs stay constant, while indexes can change when other tasks are
  8130.       deleted
  8131. SeeAlso: AX=2701h,AX=270Bh
  8132. --------T-2F270B-----------------------------
  8133. INT 2F - DR DOS 6.0 TaskMAX - CONVERT TASK ID TO TASK INDEX
  8134.     AX = 270Bh
  8135.     DX = task ID
  8136. Return: DX = task index (FFFFh if task not active)
  8137. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in both
  8138.       taskswitching and multitasking modes
  8139. SeeAlso: AX=270Ah
  8140. --------T-2F270C-----------------------------
  8141. INT 2F - DR DOS 6.0 TaskMAX - CHECK OPEN FILES
  8142.     AX = 270Ch
  8143.     DX = task index
  8144. Return: AX = number of files currently open for specified task
  8145. SeeAlso: AX=2708h
  8146. --------T-2F270D-----------------------------
  8147. INT 2F - DR DOS 6.0 TaskMAX - CHECK IF TASK RUNNING PRIMARY COMMAND INTERPRETER
  8148.     AX = 270Dh
  8149.     DX = task index
  8150. Return: DX = status
  8151.         0000h if primary command interpreter (COMMAND.COM, etc.) running
  8152.         0001h if not in root shell for task
  8153. Note:    TaskMAX will return 0001h if the specified task has spawned another
  8154.       command interpreter with AX=2707h
  8155. SeeAlso: AX=2707h,AX=270Ch
  8156. --------T-2F270E-----------------------------
  8157. INT 2F - DR DOS 6.0 TaskMAX - GET/SET TEXT PASTE LEAD-IN
  8158.     AX = 270Eh
  8159.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  8160.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  8161. Return: ES:DI -> current lead-in string
  8162. Note:    the specified sequence of keystrokes is sent to the application before
  8163.       every line of a text-mode spreadsheet paste
  8164. SeeAlso: AX=270Fh,AX=2710h,AX=2713h
  8165. --------T-2F270F-----------------------------
  8166. INT 2F - DR DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE LEAD-IN
  8167.     AX = 270Fh
  8168.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  8169.     DS:SI -> pasting lead-in string (character/scan-code pairs)
  8170. Return: ES:DI -> current lead-in string
  8171. Note:    the specified sequence of keystrokes is sent to the application before
  8172.       every number in a numeric-mode spreadsheet paste
  8173. SeeAlso: AX=270Eh,AX=2710h,AX=2711h,AX=2713h
  8174. --------T-2F2710-----------------------------
  8175. INT 2F - DR DOS 6.0 TaskMAX - GET/SET PASTE LINE TERMINATOR STRING
  8176.     AX = 2710h
  8177.     CX = length of string (max 15 keystrokes, 0000h to get current string)
  8178.     DS:SI -> pasting terminator string (character/scan-code pairs)
  8179. Return: ES:DI -> current terminator string
  8180. Note:    the specified sequence of keystrokes is sent to the application after
  8181.       every line of a spreadsheet paste operation
  8182. SeeAlso: AX=270Eh,AX=270Fh,AX=2713h
  8183. --------T-2F2711-----------------------------
  8184. INT 2F - DR DOS 6.0 TaskMAX - GET/SET NUMERIC PASTE DECIMAL POINT
  8185.     AX = 2711h
  8186.     DX = ASCII code for separator (FFFFh to get current)
  8187. Return: DL = current separator character
  8188. SeeAlso: AX=270Fh
  8189. --------T-2F2712-----------------------------
  8190. INT 2F - DR DOS 6.0 TaskMAX - INITIATE EXPORTING TASK DATA
  8191.     AX = 2712h
  8192.     DX = task index
  8193. --------T-2F2713-----------------------------
  8194. INT 2F - DR DOS 6.0 TaskMAX - INITIATE PASTE OPERATION
  8195.     AX = 2713h
  8196.     DX = task index
  8197.     CX = paste mode
  8198.         0000h alphanumeric
  8199.         0001h numeric
  8200.         0002h text
  8201. SeeAlso: AX=270Eh,AX=270Fh,AX=2710h,AX=2711h
  8202. --------T-2F2714-----------------------------
  8203. INT 2F - DR DOS 6.0 TaskMAX - GET SWAP SPACE INFO
  8204.     AX = 2714h
  8205. Return: CX = total KB of swap space
  8206.     DX = available KB of swap space
  8207. Note:    the TaskMAX API is also supported by Novell DOS 7 TASKMGR in both
  8208.       taskswitching and multitasking modes
  8209. SeeAlso: AX=2701h
  8210. --------T-2F2715-----------------------------
  8211. INT 2F - DR DOS 6.0 TaskMAX - SWITCH TO TASK MANAGER
  8212.     AX = 2715h
  8213. Return: only after calling task is again selected
  8214. SeeAlso: AX=2706h
  8215. --------T-2F2716-----------------------------
  8216. INT 2F - DR DOS 6.0 TaskMAX - GET PASTE BUFFER STATUS
  8217.     AX = 2716h
  8218. Return: AX = 0000h if AX=2716h,AX=2717h,AX=2718h supported
  8219.         CX = bytes in paste buffer
  8220.         DX = current generation number (updated after every copy operation)
  8221. SeeAlso: AX=2701h,AX=2713h,AX=2714h,AX=2717h,AX=2718h
  8222. --------T-2F2717-----------------------------
  8223. INT 2F - DR DOS 6.0 TaskMAX - PASTE DATA DIRECTLY TO APPLICATION BUFFER
  8224.     AX = 2717h
  8225.     CX = bytes in destination buffer
  8226.     ES:DI -> destination buffer
  8227. Return: AX = 0000h if function supported
  8228.         CX = bytes actually copied (FFFFh if buffer too small)
  8229.         DX = current generation number for paste buffer
  8230. Note:    the destination buffer may be too small if another task adds more data
  8231.       to the paste buffer after the AX=2716h call but before this call
  8232. SeeAlso: AX=2713h,AX=2716h,AX=2718h
  8233. --------T-2F2718-----------------------------
  8234. INT 2F - DR DOS 6.0 TaskMAX - COPY DATA DIRECTLY INTO PASTE BUFFER
  8235.     AX = 2718h
  8236.     CX = bytes in source buffer
  8237.     DS:SI -> source buffer (plain ASCII, lines terminated with CR LF)
  8238. Return: AX = 0000h if function supported
  8239.         CX = bytes actually copied
  8240.         DX = current generation number for paste buffer
  8241. SeeAlso: AX=2712h,AX=2716h,AX=2717h
  8242. --------T-2F2719-----------------------------
  8243. INT 2F - Novell DOS 7 TaskMGR - NOP
  8244.     AX = 2719h to 271Bh
  8245. --------T-2F271C-----------------------------
  8246. INT 2F U - Novell DOS 7 TaskMGR - ???
  8247.     AX = 271Ch
  8248.     DX = ???
  8249.         bit 0: ???
  8250. Return: ???
  8251.     ---if DX bit 0 set---
  8252.     AX = 0031h
  8253.     CX = 0000h
  8254. BUG:    if the task switcher is running, and DX bit 0 is set on call, this
  8255.       function will crash because its exit code attempts to pop several
  8256.       registers which are not pushed when DX bit 0 is set
  8257. --------m-2F2780CL01-------------------------
  8258. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  8259.     AX = 2780h
  8260.     CL = 01h (function number)
  8261.     CH = subfunction
  8262.         00h unused
  8263.         Return: CX = status (0002h) (see #1930)
  8264.         01h unused
  8265.         Return: CX = status (0002h) (see #1930)
  8266.         02h ???
  8267.         BX = ??? (0005h-000Fh)
  8268.         Return: CX = status (0000h,0030h) (see #1930)
  8269.         03h allocate ???
  8270.         DX = ???
  8271.         Return: CX = status (0000h,0003h) (see #1930)
  8272.         04h get ???
  8273.         Return: CX = 0000h (successful)
  8274.             BX = selector for EMM386 data segment
  8275.             EBX high word cleared
  8276.         05h ???
  8277.         EDX = ???
  8278.         Return: ???
  8279.         06h return to real mode via triple fault
  8280.         07h debugger break
  8281.         Note:    calls INT 03, then INT 21/AH=02h to output a question
  8282.               mark
  8283.         08h get ???
  8284.         Return: CX = 0000h (successful)
  8285.             EBX = ??? (0 or 2)
  8286.         09h ???
  8287.         0Ah ???
  8288.         0Bh unused
  8289.         Return: CX = status (0002h) (see #1930)
  8290.         0Ch ??? manipulates DOS memory chain
  8291.         0Dh ???
  8292.         EBX = ???
  8293.         EDX = ???
  8294.         Return: ???
  8295.         0Eh ???
  8296.         Return: CX = 0000h (successful)
  8297.             BL = ???     \ or BX = 0000h
  8298.             BH = ???     /
  8299.         0Fh get ???
  8300.         Return: CX = 0000h (successful)
  8301.             EBX = ???
  8302.         10h get and set ???
  8303.         EDX = ???
  8304.         Return: CX = 0000h (successful)
  8305.             EBX = old value of ???
  8306.         11h get ???
  8307.         Return: CX = 0000h (successful)
  8308.             EBX = ??? (0100h)
  8309.         12h get and set ???
  8310.         DX = ???
  8311.         Return: CX = 0000h (successful)
  8312.             AX = old value of ???
  8313.         13h ???
  8314.         Return: CX = status (0000h,003Fh) (see #1930)
  8315.             AX = ???
  8316.         14h ???
  8317.         EDX = ???
  8318.         Return: CX = status (0000h,003Fh) (see #1930)
  8319.         15h ???
  8320.         BX = segment of ???
  8321.         Return: CX = 0000h (successful)
  8322.             BX = segment of ???
  8323.         16h ???
  8324.         17h ???
  8325.         EBX = subfunction (0-2)
  8326.         Return: CX = status (0002h if EBX>2) (see #1930)
  8327.             ???
  8328.         18h unused
  8329.         Return: CX = status (0002h) (see #1930)
  8330. Return: CX = status (most subfunctions)
  8331.     (E)AX and/or (E)BX contain return values, depending on function
  8332. Notes:    called by DPMS.EXE and EMM386.EXE
  8333.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  8334.       because the request is handled on the initial trap to the memory
  8335.       manager caused by INT instructions, this API must be invoked with
  8336.       an actual INT 2F instruction instead of some simulation such as a
  8337.       far call to the address in the interrupt vector table
  8338. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=02h,AX=2780h/CL=03h,AX=2780h/CL=04h
  8339.  
  8340. (Table 1930)
  8341. Values for Novell DOS 7 EMM386 function status:
  8342.  0000h    successful
  8343.  0001h    invalid function???
  8344.  0002h    invalid subfunction
  8345.  0003h    ???
  8346.  0004h    invalid ??? index
  8347.  0005h    ???
  8348.  0006h    ???
  8349.  0007h    ???
  8350.  0009h    ???
  8351.  000Ah    ???
  8352.  000Bh    invalid ??? handle
  8353.  000Ch    ???
  8354.  000Dh    ???
  8355.  000Eh    ???
  8356.  000Fh    ???
  8357.  0014h    ???
  8358.  0023h    ???
  8359.  0030h    ???
  8360.  003Fh    ???
  8361. --------m-2F2780CL02-------------------------
  8362. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  8363.     AX = 2780h
  8364.     CL = 02h (function number)
  8365.     CH = subfunction
  8366.         00h ???
  8367.         ???
  8368.         Return: CX = status (0000h,0023h, others???) (see #1930)
  8369.             BX = ??? (0000h if CX=0000h, FFFFh if CX=0023h)
  8370.         Note:    calls func 04h/sf 03h, func 04h/sf 1Eh,func 02h/sf 43h,
  8371.               func 02h/sf 0Bh, and func 04h/sf 01h
  8372.         01h get and clear ???
  8373.         DX = ??? handle or 0000h for default
  8374.         Return: CX = status (0000h,000Bh) (see #1930)
  8375.             EBX = old value of ??? if successful
  8376.             EDX destroyed
  8377.         02h ???
  8378.         DX = index of ???
  8379.         Return: CX = status (0000h,0004h,0005h) (see #1930)
  8380.             EBX = 0000FFFFh on error, 00000000h if successful
  8381.         03h ???
  8382.         DX = index of ???
  8383.         Return: CX = status (0000h,0004h,0006h) (see #1930)
  8384.             BX = FFFFh on error, 0000h if successful
  8385.         04h ???
  8386.         Return: CX = status (0000h,0007h,000Ah) (see #1930)
  8387.         05h ???
  8388.         EDX -> ??? data (first 8 bytes seem to be name)
  8389.         Return: CX = status (0000h,0009h,000Dh) (see #1930)
  8390.         06h ???
  8391.         Note:    calls fn 02h/subfn 05h, then fn 02h/subfn 40h
  8392.         07h ???
  8393.         EDX = ???
  8394.         Return: CX = status (0000h,0009h,000Eh) (see #1930)
  8395.         08h ???
  8396.         EDX = ???
  8397.         Return: CX = status (0000h,0009h,000Eh) (see #1930)
  8398.         09h ???
  8399.         EDX = ???
  8400.         Return: CX = status (0000h,0009h,000Fh) (see #1930)
  8401.         0Ah ???
  8402.         EDX = ???
  8403.         Return: CX = status (0000h,0009h,000Fh) (see #1930)
  8404.         0Bh ???
  8405.         DX = ???
  8406.         Return: CX = 0000h (successful)
  8407.         0Ch ???
  8408.         Return: CX = 0000h (successful)
  8409.         0Dh ???
  8410.         Return: CX = status (0000h,0023h) (see #1930)
  8411.             BX = FFFFh on error, 0000h if successful
  8412.         Note:    calls fn 04h/subfn 03h, fn 04h/subfn 1Eh,
  8413.               fn 02h/subfn 43h, fn 02h/subfn 0Bh, fn 04h/sub 01h
  8414.         0Eh ???
  8415.         ???
  8416.         Return: CX = status (0000h,000Ch) (see #1930)
  8417.             EBX = ??? if successful
  8418.         0Fh ???
  8419.         BX = ???
  8420.         DX = ??? handle or 0000h for default
  8421.         Return: CX = status (0000h,000Bh) (see #1930)
  8422.         10h get ??? handle
  8423.         Return: CX = 0000h (successful)
  8424.             BX = handle of default ???
  8425.             EBX high word cleared
  8426.         11h ???
  8427.         DX = ??? handle or 0000h for default
  8428.         BX = ??? (handle???)
  8429.         Return:    CX = status (0000h,000Bh,0014h) (see #1930)
  8430.         12h ???
  8431.         BX = ???
  8432.         DX = ???
  8433.         Return: CX = 0000h (successful)
  8434.         13h ???
  8435.         DX = ???
  8436.         Return: CX = status (see #1930)
  8437.         14h ???
  8438.         BX = ???
  8439.         DX = ???
  8440.         Return: CX = status (0000h,0014h) (see #1930)
  8441.             BX = FFFFh on error, ??? if successful
  8442.         15h set ??? flags
  8443.         BX = ??? (low two bits only)
  8444.         DX = ??? handle or 0000h for default
  8445.         Return: CX = status (0000h,000Bh) (see #1930)
  8446.             BX = new value of ??? flags (entire word)
  8447.             EBX high register cleared
  8448.         16h clear ??? flag for default ???
  8449.         Return: CX = 0000h (successful)
  8450.         17h ???
  8451.         18h ???
  8452.         19h ???
  8453.         1Ah ???
  8454.         1Bh ???
  8455.         1Ch ???
  8456.         1Dh ???
  8457.         1Eh ???
  8458.         1Fh ???
  8459.         20h ???
  8460.         21h ???
  8461.         22h ???
  8462.         23h ???
  8463.         24h ???
  8464.         25h ???
  8465.         26h ???
  8466.         27h ???
  8467.         28h ???
  8468.         29h ???
  8469.         2Ah ???
  8470.         2Bh ???
  8471.         2Ch ???
  8472.         2Dh ???
  8473.         2Eh ???
  8474.         2Fh ???
  8475.         30h ???
  8476.         31h ???
  8477.         32h ???
  8478.         33h ???
  8479.         34h ???
  8480.         35h ???
  8481.         36h ???
  8482.         37h ???
  8483.         38h ???
  8484.         39h ???
  8485.         3Ah ???
  8486.         3Bh ???
  8487.         3Ch ???
  8488.         3Eh ???
  8489.         3Fh ???
  8490.         40h ???
  8491.         41h ???
  8492.         42h ???
  8493.         43h ???
  8494.         44h ???
  8495.         45h ???
  8496.         46h ???
  8497.         47h ???
  8498. Return: CX = status (most subfunctions)
  8499.     (E)AX and/or (E)BX contain return values, depending on function
  8500. Notes:    called by DPMS.EXE and EMM386.EXE
  8501.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  8502.       because the request is handled on the initial trap to the memory
  8503.       manager caused by INT instructions, this API must be invoked with
  8504.       an actual INT 2F instruction instead of some simulation such as a
  8505.       far call to the address in the interrupt vector table
  8506. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=03h,AX=2780h/CL=04h
  8507. --------m-2F2780CL03-------------------------
  8508. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  8509.     AX = 2780h
  8510.     CL = 03h (function number)
  8511.     CH = subfunction
  8512.         00h ???
  8513.         01h ???
  8514.         02h ???
  8515.         03h ???
  8516.         04h ???
  8517.         05h ???
  8518.         06h ???
  8519.         07h ???
  8520.         08h ???
  8521.         09h ???
  8522.         0Ah ???
  8523.         0Bh ???
  8524.         0Ch ???
  8525.         0Dh ???
  8526.         0Eh ???
  8527.         0Fh ???
  8528.         10h ???
  8529.         11h ???
  8530.         12h ???
  8531.         13h ???
  8532.         14h ???
  8533.         15h ???
  8534.         16h ???
  8535.         17h ???
  8536.         18h ???
  8537.         19h ???
  8538.         1Ah ???
  8539.         1Bh ???
  8540.         1Ch ???
  8541.         1Dh ???
  8542.         1Eh ???
  8543.         1Fh ???
  8544.         20h ???
  8545.         21h ???
  8546.         22h ???
  8547.         23h ???
  8548.         24h ???
  8549.         25h ???
  8550.         26h ???
  8551.         27h ???
  8552.         28h ???
  8553.         29h ???
  8554.         2Ah ???
  8555.         2Bh ???
  8556.         2Ch ???
  8557.         2Dh ???
  8558.         2Eh ???
  8559.         2Fh ???
  8560.         30h ???
  8561.         31h ???
  8562.         32h ???
  8563.         33h ???
  8564.         34h ???
  8565.         35h ???
  8566.         36h ???
  8567.         37h ???
  8568. Return: CX = status (most subfunctions)
  8569.     (E)AX and/or (E)BX contain return values, depending on function
  8570. Notes:    called by DPMS.EXE and EMM386.EXE
  8571.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  8572.       because the request is handled on the initial trap to the memory
  8573.       manager caused by INT instructions, this API must be invoked with
  8574.       an actual INT 2F instruction instead of some simulation such as a
  8575.       far call to the address in the interrupt vector table
  8576. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=04h
  8577. --------m-2F2780CL04-------------------------
  8578. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  8579.     AX = 2780h
  8580.     CL = 04h (function number)
  8581.     CH = subfunction
  8582.         00h ???
  8583.         01h ???
  8584.         02h ???
  8585.         03h ???
  8586.         04h ???
  8587.         05h ???
  8588.         06h ???
  8589.         07h ???
  8590.         08h ???
  8591.         09h ???
  8592.         0Ah ???
  8593.         0Bh ???
  8594.         0Ch ???
  8595.         0Dh ???
  8596.         0Eh ???
  8597.         0Fh ???
  8598.         10h ???
  8599.         11h ???
  8600.         12h ???
  8601.         13h ???
  8602.         14h ???
  8603.         15h ???
  8604.         16h ???
  8605.         17h ???
  8606.         18h ???
  8607.         19h ???
  8608.         1Ah ???
  8609.         1Bh ???
  8610.         1Ch ???
  8611.         1Dh ???
  8612.         1Eh ???
  8613.         1Fh ???
  8614.         20h ???
  8615.         21h ???
  8616.         22h ???
  8617.         23h ???
  8618.         24h ???
  8619.         25h ???
  8620.         26h ???
  8621.         27h ???
  8622.         28h ???
  8623.         29h ???
  8624.         2Ah ???
  8625.         2Bh ???
  8626.         2Ch ???
  8627.         2Dh ???
  8628.         2Eh ???
  8629.         2Fh ???
  8630.         30h ???
  8631.         31h ???
  8632.         32h ???
  8633. Return: CX = status (most subfunctions)
  8634.     (E)AX and/or (E)BX contain return values, depending on function
  8635. Notes:    called by DPMS.EXE and EMM386.EXE
  8636.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  8637.       because the request is handled on the initial trap to the memory
  8638.       manager caused by INT instructions, this API must be invoked with
  8639.       an actual INT 2F instruction instead of some simulation such as a
  8640.       far call to the address in the interrupt vector table
  8641. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  8642. --------m-2F2780CL05-------------------------
  8643. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  8644.     AX = 2780h
  8645.     CL = 05h
  8646.     ???
  8647. Return: ???
  8648. Notes:    called by DPMS.EXE and EMM386.EXE
  8649.     the handler for this function may be set by one of the subfunctions
  8650.       of AX=2780h/CL=01h; the default handler returns AX=BX=FFFFh and
  8651.       CX=0001h (see #1930)
  8652.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  8653.       because the request is handled on the initial trap to the memory
  8654.       manager caused by INT instructions, this API must be invoked with
  8655.       an actual INT 2F instruction instead of some simulation such as a
  8656.       far call to the address in the interrupt vector table
  8657. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  8658. --------m-2F2780CL06-------------------------
  8659. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  8660.     AX = 2780h
  8661.     CL = 06h
  8662.     ???
  8663. Return: ???
  8664. Notes:    called by DPMS.EXE and EMM386.EXE
  8665.     the handler for this function may be set by one of the subfunctions
  8666.       of AX=2780h/CL=01h; the default handler returns AX=BX=FFFFh and
  8667.       CX=0001h (see #1930)
  8668.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  8669.       because the request is handled on the initial trap to the memory
  8670.       manager caused by INT instructions, this API must be invoked with
  8671.       an actual INT 2F instruction instead of some simulation such as a
  8672.       far call to the address in the interrupt vector table
  8673. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  8674. --------m-2F2780-----------------------------
  8675. INT 2F U - Novell DOS 7 - EMM386.EXE - MULTITASKING API
  8676.     AX = 2780h
  8677.     CL = function (07h-0Fh)
  8678.     ???
  8679. Return: ???
  8680. Notes:    called by DPMS.EXE and EMM386.EXE
  8681.     the handlers for each of these functions may be set individually by
  8682.       one of the subfunctions of AX=2780h/CL=01h; the default handlers
  8683.       return with all registers unchanged
  8684.     this API is only available if AX=12FFh/BX=0EDCh returns successfully;
  8685.       because the request is handled on the initial trap to the memory
  8686.       manager caused by INT instructions, this API must be invoked with
  8687.       an actual INT 2F instruction instead of some simulation such as a
  8688.       far call to the address in the interrupt vector table
  8689. SeeAlso: AX=12FF/BX=0EDCh,AX=2780h/CL=01h,AX=2780h/CL=02h,AX=2780h/CL=03h
  8690. --------T-2F2781-----------------------------
  8691. INT 2F U - Novell DOS 7 TaskMGR - BEGIN CRITICAL SECTION???
  8692.     AX = 2781h
  8693. Return: ???
  8694. SeeAlso: AX=2782h
  8695. --------T-2F2782-----------------------------
  8696. INT 2F U - Novell DOS 7 TaskMGR - END CRITICAL SECTION???
  8697.     AX = 2782h
  8698. Return: ???
  8699. SeeAlso: AX=2781h
  8700. --------m-2F2783-----------------------------
  8701. INT 2F U - Novell DOS 7 - EMM386.EXE - GET ???
  8702.     AX = 2783h
  8703. Return: AX = ???
  8704.     BX = ???
  8705. --------T-2F278F-----------------------------
  8706. INT 2F U - Novell DOS 7 TaskMGR - ??? API
  8707.     AX = 278Fh
  8708.     as for INT 2F/AX=2780h
  8709. Return: as for INT 2F/AX=2780h
  8710. Note:    Novell DOS 7 TaskMGR passes this call through to INT 2F/AX=2780h
  8711.       without changing any other registers
  8712. SeeAlso: AX=2780h,AX=2782h
  8713. --------F-2F2A-------------------------------
  8714. INT 2F - Gammafax DOS Dispatcher INTERFACE
  8715.     AH = 2Ah
  8716. Note:    details not available at this time
  8717. SeeAlso: AX=8000h"FaxBIOS",AX=C000h/BX=444Bh,AX=CB00h,AX=CBDDh,INT 66"BitFax"
  8718. --------V-2F2E00-----------------------------
  8719. INT 2F U - Novell DOS 7 - GRAFTABL - INSTALLATION CHECK
  8720.     AX = 2E00h
  8721. Return: AH = FFh if installed
  8722. Note:    this installation check does not follow the usual format of setting
  8723.       AL to FFh
  8724. SeeAlso: AX=2300h,AH=2Eh"GRAFTABL"
  8725. --------V-2F2E-------------------------------
  8726. INT 2F U - Novell DOS 7 - GRAFTABL - GET FONT TABLE
  8727.     AH = 2Eh
  8728.     AL nonzero
  8729. Return: AH = FFh if installed
  8730.         ES:BX -> graphics data (8 bytes per character from 80h to FFh)
  8731. SeeAlso: AX=2E00h,AH=23h"GRAFTABL"
  8732. --------t-2F3900-----------------------------
  8733. INT 2F - Kingswood TSR INTERFACE - COMPATIBILITY MODE
  8734.     AX = 3900h
  8735. Return: AL = status
  8736.         00h not installed
  8737.         FFh one or more TSRs using this interface is installed
  8738.         DX may be destroyed
  8739. Note:    this function is provided to that the multiplex number will appear used
  8740.       to other programs
  8741. SeeAlso: AH=39h/BL=00h
  8742. --------t-2F39--BL00-------------------------
  8743. INT 2F - Kingswood TSR INTERFACE - INSTALLATION CHECK
  8744.     AH = 39h
  8745.     BL = 00h
  8746.     AL = TSR ID number (01h-FFh, currently only 01h-1Bh used) (see #1931)
  8747. Return: AL = status
  8748.         00h not installed
  8749.         FFh installed
  8750.         DX = segment address of resident module
  8751. Note:    All of Kingswood Software's TSRs use this interface.  Usually the
  8752.       resident module is installed by allocating a block of upper memory,
  8753.       setting its owner ID to 000Ah (used by DOS), and filling the MCB name
  8754.       field with the TSR's name.
  8755. SeeAlso: #1932,AX=3900h,AH=39h/BL=01h
  8756.  
  8757. (Table 1931)
  8758. Values for Kingswood TSR ID number:
  8759.  01h    TSR Windows
  8760.  02h    NOBUSY
  8761.  03h    CD STACK
  8762.  04h    DISK WATCH
  8763.  05h    PUSHBP
  8764.  06h    ALIAS
  8765.  07h    KEYMACRO
  8766.  08h    SLOWDOWN
  8767.  09h    ANSIGRAB
  8768.  0Ah    TEE
  8769.  0Bh    FASTMOUS
  8770.  0Ch    EXTWILD
  8771.  0Dh    BREAKOUT
  8772.  0Eh    STOPDISK
  8773.  0Fh    MEMINIT
  8774.  10h    JANUSEXT
  8775.  11h    CAPS
  8776.  12h    ANSI
  8777.  13h    TRAPPER
  8778.  14h    EATMEM
  8779.  15h    WPJOKE
  8780.  16h    SHOWDOS
  8781.  17h    LOGINTS
  8782.  18h    BLANKVGA
  8783.  19h    SWAPEXEC
  8784.  1Ah    SHELL
  8785.  1Bh    TSRGAMES
  8786.  
  8787. Format of Kingswood TSR modules:
  8788. Offset    Size    Description    (Table 1932)
  8789.  00h  4 BYTEs    signature "FTSR"
  8790.  04h    WORD    segment address of this module (used to check validity)
  8791.  06h    WORD    number of words to skip (usually 0000h if no PSP present)
  8792.  08h  N WORDs    module-defined data that must be at a fixed segment offset
  8793.         (usually only a PSP if file access is required)
  8794.      5N BYTEs    interrupt list (see #1933)
  8795.     BYTE    FFh terminator
  8796.  
  8797. Format of Kingswood TSR interrupt list entry:
  8798. Offset    Size    Description    (Table 1933)
  8799.  00h    BYTE    interrupt number (00h-FEh)
  8800.  01h    WORD    offset within segment of DWORD pointer to previous interrupt
  8801.  03h    WORD    offset within segment of begin of interrupt handler code
  8802. --------t-2F39--BL01-------------------------
  8803. INT 2F - Kingswood TSR INTERFACE - REMOVAL CHECK
  8804.     AH = 39h
  8805.     BL = 01h
  8806.     AL = TSR ID number (01h-FFh) (see #1931)
  8807. Return: AL = status
  8808.         00h not ready to be removed
  8809.         FFh resident module may be removed by deassigning the interrupts
  8810.           hooked by the TSR and deallocating the TSR's memory block
  8811.     AH,BX,CX,DX,ES may be destroyed
  8812. SeeAlso: AX=3900h,AH=39h/BL=00h
  8813. --------t-2F39-------------------------------
  8814. INT 2F - Kingswood TSR INTERFACE - APPLICATION-SPECIFIC FUNCTION CALLS
  8815.     AH = 39h
  8816.     BL = function number (02h-FFh)
  8817.     AL = TSR ID number (01h-FFh) (see #1931)
  8818.     CX,DX,SI,DI,DS,ES may contain parameters
  8819.     BH reserved for use by the function dispatcher
  8820. Return: as appropriate for the called function
  8821. SeeAlso: AX=3900h,AH=39h/BL=00h,AX=3901h/BL=02h
  8822. --------r-2F3901BL02-------------------------
  8823. INT 2F - Kingswood TSR Windows - OPEN WINDOW
  8824.     AX = 3901h
  8825.     BL = 02h
  8826. Return: AX = error code (0000h if successful)
  8827.     SI,DI,DS,ES preserved
  8828. Notes:    opens the next TSR window on top of any others.     Only three
  8829.       TSR windows can be opened at any one time.  The three windows
  8830.       are all 40x11 characters, partly overlapping.
  8831. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=03h,AX=3901h/BL=05h,AX=3901h/BL=06h
  8832. --------r-2F3901BL03-------------------------
  8833. INT 2F - Kingswood TSR Windows - HIDE WINDOWS
  8834.     AX = 3901h
  8835.     BL = 03h
  8836. Return: AX = error code (0000h if successful)
  8837.     SI,DI,DS,ES preserved
  8838. Notes:    Hide any visible TSR windows from view.
  8839. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=05h
  8840. --------r-2F3901BL04-------------------------
  8841. INT 2F - Kingswood TSR Windows - SHOW WINDOWS
  8842.     AX = 3901h
  8843.     BL = 04h
  8844. Return: AX = error code (0000h if successful)
  8845.     SI,DI,DS,ES preserved
  8846. Notes:    Re-display all TSR windows after a HIDE WINDOWS call.
  8847. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h,AX=3901h/BL=03h
  8848. --------r-2F3901BL05-------------------------
  8849. INT 2F - Kingswood TSR Windows - CLOSE WINDOW
  8850.     AX = 3901h
  8851.     BL = 05h
  8852. Return: AX = error code (0000h if successful)
  8853.     SI,DI,DS,ES preserved
  8854. Notes:    Close the last opened TSR window.
  8855. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  8856. --------r-2F3901BL06-------------------------
  8857. INT 2F - Kingswood TSR Windows - SET WINDOW TITLE
  8858.     AX = 3901h
  8859.     BL = 06h
  8860.     DS:SI -> title string
  8861. Return: AX = error code (0000h if successful)
  8862.     SI,DI,DS,ES preserved
  8863. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  8864. --------r-2F3901BL07-------------------------
  8865. INT 2F - Kingswood TSR Windows - POSITION CURSOR
  8866.     AX = 3901h
  8867.     BL = 07h
  8868.     CH = Y coordinate (0-10)
  8869.     CL = X coordinate (0-39)
  8870. Return: AX = error code (0000h if successful)
  8871.     SI,DI,DS,ES preserved
  8872. Note:    the hardware cursor is always disabled when a TSR window is opened;
  8873.       this call only sets a text position
  8874. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=08h,AX=3901h/BL=09h
  8875. --------r-2F3901BL08-------------------------
  8876. INT 2F - Kingswood TSR Windows - DISPLAY STRING
  8877.     AX = 3901h
  8878.     BL = 08h
  8879.     DS:SI -> string
  8880. Return: AX = error code (0000h if successful)
  8881.     SI,DI,DS,ES preserved
  8882. Notes:    The text is not clipped.
  8883.     This routine understands Tab, NewLine and Carriage Return
  8884. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  8885. --------r-2F3901BL09-------------------------
  8886. INT 2F - Kingswood TSR Windows - SCROLL WINDOW
  8887.     AX = 3901h
  8888.     BL = 09h
  8889.     CL = scroll direction: 01h up, FFh down, 00h clear window
  8890. Return: AX = error code (0000h if successful)
  8891.     SI,DI,DS,ES preserved
  8892. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=07h
  8893. --------r-2F3901BL0A-------------------------
  8894. INT 2F - Kingswood TSR Windows - SOUND BEEPER
  8895.     AX = 3901h
  8896.     BL = 0Ah
  8897.     DX = sound divisor, or 0 for silence.
  8898.          (divide 1843200 by required frequency to get value for DX)
  8899.     CL = sound length in 18.2 Hz clock ticks
  8900. Return: AX = error code (0000h if successful)
  8901.     SI,DI,DS,ES preserved
  8902. SeeAlso: AH=39h/BL=00h
  8903. --------r-2F3901BL0B-------------------------
  8904. INT 2F - Kingswood TSR Windows - ADD OR REMOVE USER
  8905.     AX = 3901h
  8906.     BL = 0Bh
  8907.     CL = number of users increment: +1 if adding a new user
  8908.                     -1 if removing a user
  8909. Return: AX = error code (0000h if successful)
  8910.     SI,DI,DS,ES preserved
  8911. Note:    the TSR windows resident module may only be removed when the internal
  8912.       user count is zero
  8913. SeeAlso: AH=39h/BL=00h,AX=3901h/BL=02h
  8914. --------V-2F3912BL03-------------------------
  8915. INT 2F - Kingswood ANSI display driver - SET COMPATIBILITY MODE
  8916.     AX = 3912h
  8917.     BL = 03h
  8918.     CL = new mode (00h fast, FFh BIOS)
  8919. Return: AL = old compatibility mode
  8920.     SI,DI,DS,ES preserved
  8921. SeeAlso: AX=3900h,AX=3912h/BL=04h
  8922. --------V-2F3912BL04-------------------------
  8923. INT 2F - Kingswood ANSI display driver - SET FLAGS
  8924.     AX = 3912h
  8925.     BL = 04h
  8926.     CL = new flags (see #1934)
  8927. Return: AL = old flags
  8928.     SI,DI,DS,ES preserved
  8929. SeeAlso: AX=3900h,AX=3912h/BL=03h
  8930.  
  8931. Bitfields for Kingswood ANSI flags:
  8932. Bit(s)    Description    (Table 1934)
  8933.  0    do not wrap at end of line
  8934.  1    wait for beeps to end before displaying next character
  8935.  2    do not use graphics cursor
  8936. --------W-2F4000-----------------------------
  8937. INT 2F - Windows 3.x (OS/2 2.x???) - GET VIRTUAL DEVICE DRIVER (VDD) CAPABLTIES
  8938.     AX = 4000h
  8939. Return: AL = video virtualization (see #1935)
  8940. Note:    this function is used by display drivers to find out what capabilities
  8941.       exist for the VDD driver and also trigger the VDD driver to call
  8942.       functions 4005h and 4006h.  This function also gives the Video Driver
  8943.       hardware access to the video registers.
  8944.  
  8945. (Table 1935)
  8946. Values for Windows video virtualization:
  8947.  01h    does not virtualize video access
  8948.  02h    virtualizes the video when in text mode
  8949.  03h    virtualizes the video when in text mode or single plane graphics modes
  8950.  04h    virtualizes the video when in text mode, single plane graphics modes,
  8951.       and VGA multiplane modes
  8952.  FFh    virtualizes the video fully
  8953. --------O-2F4001-----------------------------
  8954. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO BACKGROUND
  8955.     AX = 4001h
  8956. Note:    called by OS/2 when the DOS box is about to be placed in the background
  8957.       and the video driver should save any necessary state
  8958. SeeAlso: AX=4002h,AX=4005h
  8959. --------O-2F4002-----------------------------
  8960. INT 2F C - OS/2 compatibility box - SWITCHING DOS TO FOREGROUND
  8961.     AX = 4002h
  8962. Note:    called by OS/2 when the DOS box is about to be placed in the foreground
  8963.       and the video driver should restore the previously-saved state
  8964. SeeAlso: AX=4001h,AX=4006h
  8965. --------W-2F4003-----------------------------
  8966. INT 2F - Windows 3.x - ENTERING VIDEO DRIVER CRITICAL SECTION
  8967.     AX = 4003h
  8968. Note:    This critical section must be exited within 1 second.
  8969. SeeAlso: AX=4004h
  8970. --------W-2F4004-----------------------------
  8971. INT 2F - Windows 3.x - EXITING VIDEO DRIVER CRITICAL SECTION
  8972.     AX = 4004h
  8973. SeeAlso: AX=4003h
  8974. --------W-2F4005-----------------------------
  8975. INT 2F C - Windows 3.x - SWITCHING DOS TO BACKGROUND
  8976.     AX = 4005h
  8977. Note:    called by Windows when the DOS box is about to be placed in the
  8978.       background and the video driver should save any necessary state
  8979.       information (this may be called only in Standard mode)
  8980. SeeAlso: AX=4001h,AX=4006h
  8981. --------W-2F4006-----------------------------
  8982. INT 2F C - Windows 3.x - SWITCHING DOS TO FOREGROUND
  8983.     AX = 4006h
  8984. Note:    called by Windows when the DOS box is about to be placed in the
  8985.       foreground and the video driver should restore any necessary state
  8986.       information (this may be called only in Standard mode)
  8987. SeeAlso: AX=4002h,AX=4005h
  8988. --------W-2F4007-----------------------------
  8989. INT 2F - Windows 3.x - ENABLE VDD TRAPPING OF VIDEO REGISTERS
  8990.     AX = 4007h
  8991. Note:    used by Windows Standard mode
  8992. --------O-2F4010-----------------------------
  8993. INT 2F - OS/2 v2.0+ - INSTALLATION CHECK / GET VERSION
  8994.     AX = 4010h
  8995. Return: AX = 4010h if OS/2 not installed
  8996.     AX = 0000h for OS/2 Warp 3.0
  8997.     BX = OS/2 version if installed
  8998. Note:    OS/2 Warp 3.0
  8999. SeeAlso: INT 21/AH=30h,INT 21/AX=3306h
  9000. --------E-2F4040-----------------------------
  9001. INT 2F - PharLap 286|DOS-Extender Lite v2.5 - ???
  9002.     AX = 4040h
  9003. Return: BX:CX -> ???
  9004. --------N-2F4100-----------------------------
  9005. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - INSTALLATION CHECK
  9006.     AX = 4100h
  9007. Return: CF clear if successful
  9008.         AL = FFh
  9009.     CF set on error
  9010.         AX = ???
  9011. Notes:    MINIPOP and NETPOPUP provide a network message popup service
  9012.     LAN Manager enhanced mode adds features beyond the standard redirector
  9013.       file/printer services
  9014. SeeAlso: AX=118Ah,AX=4103h,AX=4104h,AH=42h,AH=4Bh
  9015. --------N-2F4103-----------------------------
  9016. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  9017.     AX = 4103h
  9018. Return: ???
  9019. SeeAlso: AX=4100h,AX=4104h
  9020. --------N-2F4104-----------------------------
  9021. INT 2F - DOS Enhanced LAN Manager 2.0+ MINIPOP/NETPOPUP - ???
  9022.     AX = 4104h
  9023. Return: ???
  9024. SeeAlso: AX=4100h,AX=4103h
  9025. --------N-2F42-------------------------------
  9026. INT 2F - LAN Manager 2.0 DOS Enhanced MSRV.EXE - MESSENGER SERVICE
  9027.     AH = 42h
  9028.     ???
  9029. Return: ???
  9030. Note:    LAN Manager enhanced mode adds features beyond the standard redirector
  9031.       file/printer services
  9032. SeeAlso: AX=118Ah,AX=4100h,AH=4Bh
  9033. --------!---Section--------------------------
  9034.